MATALAB三维曲线拟合

时间:2025-04-03

利用MATLAB函数编写的程序,进行三维曲线拟合

三维曲线(非线性)拟合步骤

1 设定目标函数. (M函数书写)% 可以是任意的
例如:

function f=mydata(a,data) %y的值目标函数值 或者是第三维的,a=[a(1) ,a(2)] 列向量
x=data(1,:); %data 是一2维数组,x=x1
y=data(2,:); %data 是一2维数组,x=x2
f=a(1)*x+a(2)*x.*y; %这里的a(1), a(2)为目标函数的系数值。 f的值相当于ydata的值

2 然后给出数据xdata和ydata的数据和拟合函数lsqcurvefit

例如:
x1=[1.0500 1.0520 1.0530 1.0900 1.0990 1.1020 1.1240 1.1420...
1.1490 1.0500 1.0520 1.0530 1.0900 1.0990 1.1020 1.1240 1.1420 1.1490];
x2=[3.8500 1.6500 2.7500 5.5000 7.7000 3.3000 4.9500 8.2500 11.5500...
1.6500 2.7500 3.8500 7.7000 3.3000 5.5000 8.2500 11.5500 4.9500];
ydata=[56.2000 62.8000 62.2000 40.8000 61.4000 57.5000 44.5000 54.8000...
53.9000 64.2000 62.9000 64.1000 63.0000 62.2000 64.2000 63.6000...
52.5000 62.0000];
data=[x1;x2]; %类似于将x1 x2整合成一个2维数组。
a0= [-0.0014,0.07];
option=optimset('MaxFunEvals',5000);
format long;
[a,resnorm]=lsqcurvefit(@mydata,a0,data,ydata,[],[],option);
yy=mydata(a,data);
result=[ydata' yy' (yy-ydata)']
% a的值为拟合的目标函数的参数值 利用lsqcurvefit进行拟合的 它完整的语法形式是:
% [x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)






二维曲线(非线性)拟合步骤

1.function F = myfun(x,xdata)

F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3; % 可以是任意的

2.然后给出数据xdata和ydata

>>xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];

>>ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];

>>x0 = [10, 10, 10]; %初始估计值

>>[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)


搜狐博客 > 豆豆快乐吧 > 日志 2009-09-01 | Matlab画三维图的方法

Matlab画三维图的方法
Tags: Matlab.

三维曲线的画法
三维空间曲线要用到plot3函数,这个和plot类似。plot3函数有三个参数,x,y和z轴,比如下面的例子:

>> T = -2:0.01:2;

>> plot3(cos(2*pi*T),sin(2*pi*T),T)



如果安装了Symbolic Math Toolbox的话也可以用下面ezlpot3函数的方法:

>> ezplot3('cos(2*pi*T)','sin(2*pi*T)','T',[-2 2])



三维曲面的画法
有mesh何surf两种命令来画三维曲面,它们使用的场合不同。前者是当z轴是x和y的显式函数时,后者是x,y,z中某个为其他2个的函数。

mesh函数
>> [X Y]=meshgrid(-2:.1:2, -2:.1:2);

>> Z = X.^2 - Y.^2;

>> mesh(X, Y, Z)



同理用Symbolic Math
Toolbox可以直接执行

>> ezmesh('X.^2 - Y.^2', [-2 2], [-2 2])

surf函数
在函数不能表示成z = f(x, y)时,需要用surf函数。比如x2+y2+z2=1.

先需要用柱面坐标或者球坐标来表示。这里用柱

利用MATLAB函数编写的程序,进行三维曲线拟合

面坐标表示为 r2+z2=1

x = sqrt(1-z2)cosθ, x = sqrt(1-z2)sinθ;

执行matlab指令:

>> [theta, Z] = meshgrid((0:0.1:2)*pi, (-1:0.1:1));

>> X =sqrt(1 - Z.^2).*cos(theta);

>> Y =sqrt(1 - Z.^2).*sin(theta);

>> surf(X, Y, Z); axis square



同理用Symbolic Math Toolbox可以直接执行

>> ezsurf('sqrt(1-s^2)*cos(t)','sqrt(1-s^2)*sin(t)', 's', [-1, 1, 0, 2*pi]); axis equa




常用的一些插值命令


命令1 interp1
功能 一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。
x:原始数据点
Y:原始数据点
xi:插值点
Yi:插值点
格式 yi = interp1(x,Y,xi) %返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。
若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。
yi = interp1(Y,xi) %假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。
yi = interp1(x,Y,xi,method) %用指定的算法计算插值:
’nearest’:最近邻点插值,直接完成计算;
’linear’:线性插值(缺省方式),直接完成计算;
’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函
数。命令spline 用它们执行三次样条函数插值;
’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与
数据的外形;
’cubic’:与’pchip’操作相同;
’v5cubic’:在MATLAB 5.0 中的三次插值。
对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。
yi = interp1(x,Y,xi,method,'extrap') %对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。
yi = interp1(x,Y,xi,method,extrapval) %确定超出x 范围的xi 中的分量的外 …… 此处隐藏:7329字,全部文档内容请下载后查看。喜欢就下载吧 ……

MATALAB三维曲线拟合.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219