在MATLAB中,已知两组数据x y,怎样通过线性拟合,使得到的三次拟合多项式经过指定的点呢?例如原点
原来数据 是x,y是长度相等的数列
过原点的二次多项式就是f(x)= ax^2+bx,常数项为0
fun=@(p,x) p(1)*x.^2+p(2)*x;
p=polyfit(x,y,2);
p=nlinfit(x,y,fun,[p(1) p(2)]);
a=p(1)
b=p(2)
我这有个例子挺好看看应该明白!
e(x0,y0,x)
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
SOR迭代法的Matlab程序
function [x]=SOR_iterative(A,b)
% 用SOR迭代求解线性方程组,矩阵A是方阵
x0=zeros(1,length(b)); % 赋初值
tol=10^(-2); % 给定误差界
N=1000; % 给定最大迭代次数
[n,n]=size(A); % 确定矩阵A的阶
w=1; % 给定松弛因子
k=1;
% 迭代过程
while k=N
x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);
for i=2:n
x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);
end
if max(abs(x-x0))=tol
fid = fopen('SOR_iter_result.txt', 'wt');
fprintf(fid,'
********用SOR迭代求解线性方程组的输出结果********
');
fprintf(fid,'迭代次数: %d次
',k);
fprintf(fid,'x的值
');
fprintf(fid, '%12.8f
', x);
break;
end
k=k+1;
x0=x;
end
if k==N+1
fid = fopen('SOR_iter_result.txt', 'wt');
fprintf(fid,'
********用SOR迭代求解线性方程组的输出结果********
');
fprintf(fid,'迭代次数: %d次
',k);
fprintf(fid,'超过最大迭代次数,求解失败!');
fclose(fid);
end
普通三次拟合
Linear model Poly3:
f(x) = p1*x^3 + p2*x^2 + p3*x + p4
Coefficients (with 95% confidence bounds):
p1 = 0.006245 (0.0038, 0.008689)
p2 = -0.2037 (-0.2668, -0.1406)
p3 = 2.182 (1.713, 2.651)
p4 = 2.572 (1.623, 3.521)
Goodness of fit:
SSE: 1.37
R-square: 0.972
Adjusted R-square: 0.965
RMSE: 0.3379
过原点的拟合
General model:
f(x) = x*(p1*x^2 + p2*x + p3)
Coefficients (with 95% confidence bounds):
p1 = 0.0112 (0.008154, 0.01426)
p2 = -0.344 (-0.4119, -0.2761)
p3 = 3.342 (2.981, 3.702)
Goodness of fit:
SSE: 5.35
R-square: 0.8906
Adjusted R-square: 0.8737
RMSE: 0.6415
matlab中我已写出插值函数,怎么取特定点的值?
y1=interp1(x,y,900,'nearest'); y2=interp1(x,y,900,'linear');y3=interp1(x,y,900,'pchip');y4=spline(x,y,900);
matlab中如何在已画好的线上标记某几段
以达到效果为目的,为什么不分段画 plot(xcal,meansp);hold on;plot(xcal(1:36),meansp(1:36),'-r','LineWidth',2.0);plot(xcal(46:60),meansp(46:60),'-r','LineWidth',2.0);迈特莱博
求助:matlab中已拟和出方程后怎么计算准确性(相关系数)?
用regress吧,例如 x=[1,2.5,5,7,9];y=[3,6.2,11,15,18.9];format long p=polyfit(x,y,1)[B,BINT,R,RINT,STATS] = regress(y',[x; ones(size(x))]')结果:p = 1.978909952606635 1.123341232227488 B = 1.978909952606635 1.123341232227488 BINT = 1.930553149300408 ...
matlab中怎么设置坐标范围
有时候我们在使用matlab的时候,想设置绘制图形的坐标范围,怎么设置呢,下面来分享一下方法 第一步在我们的电脑上打开matlab,通过plot(x,x.^2)绘制了一条平方曲线,subplot(2,1,1)代表界面中显示两张图,纵向排列,第一组显示,如下图所示:第二步在命令行窗口中按回车键,可以看到已经显示出一条...
Matlab中如何同时关闭多个已打开的figure?
plot([1 2 3],[4 5 6])。2、判断该figure是否打开,可以借助ishandle函数,代码如下:val = ishandle(pic);如果val值为1,则figure已打开,为0,figure已关闭。3、关闭figure的m代码如下:close('我的百度');可以通过识别figure的名称,实现特定figure关闭。4、通过一定的逻辑控制,就可以实现...
matlab中如何显示已调信号的完整波形
假设X为信号,plot(X)显示信号的波形,如果X为复数形式,可用plot(abs(X))显示幅度波形,plot(angle(X))显示相位波形,也可用real和imag函数取实部和虚部。
matlab显示警告桌面配置文件已损坏
改变路径。MATLAB 是美国MathWorks公司出品的商业数学软件。matlab显示警告桌面配置文件已损坏要改变路径。matlab用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言。
Matlab GUI 界面中已设置了一个坐标轴(axes1)用于画图,如何获取坐标...
当然你改变的是整个axes的颜色 要获取画的图形的句柄,首先有知道你画的是什么 画的是曲线,还是曲面 如果画的是曲线:set(findobj(gca,'type','line'),...)如果画的是曲面:set(findobj(gca,'type','line'),...)最好还是你画它的时候,把他的句柄保存起 ...
请问在MATLAB中如何求得已划出的曲线(折线)上给定横坐标所对应的纵坐标...
样条插值。比方说,已知的数据是X,Y 你将X的间隔变小一些赋于xi X=1:90;Y=(-X+45).*(X<45)+(X-45).*(X>=45);xi=1:0.5:90; %这个点比X的多 yi = interp1(X,Y,xi,'spline');plot(X,Y,'*',X,Y,'b',xi,yi,'r')你注意看上面这图(你放大看)里面的X=45时,蓝线是...
matlab如何保存一个已画出的图像
使用saveas函数,用法是: saveas(figure_handle,'filename.fileformat');图像句柄figure_handle固定为gcf,就是所化图形的句柄,后边是文件名和格式。例如:plot(1:10);saveas(gcf,‘myfig.jpg’)将所画图保存为myfig,类型是jpg格式,保存地点为当前文件夹。
习雪复方: 举个列子………………X=1:100; 直接y=sin(x)就搞定.
兴宁市13979946025: 已知两组不同的数据,怎么用Matlab画出两条对应的曲线? - ?
习雪复方: 用plot(x1,y1,'r*',x2,y2,'g') 前组数据用红线星号表示,后组用绿色线表示
兴宁市13979946025: 已知x和y两组数据,怎样用matlab求解x=(a*y)/(b - c*y)中a,b,c最优解 - ?
习雪复方: 用Matlab的cftool工具,结果如下:General model: f(x) = b*x/(a+c*x) Coefficients (with 95% confidence bounds): a = -0.1153 (-1.069e+006, 1.069e+006) b = 0.003533 (-3.275e+004, 3.275e+004) c = 1.64 (-1.52e+007, 1.52e+007)Goodness of fit: SSE: 2.882e-005 R-square: 0.6099 Adjusted R-square: 0.2198 RMSE: 0.003796
兴宁市13979946025: 已知,x和y两组数据,怎样用matlab求解拟合曲线 P=a+b*x+c*x^3?
习雪复方: 将以下程序保存为fun1.m文件,放在工作目录中,备用 function P=fun1(p,xdata) P=p(1)+p(2)*xdata+p(3)*(xdata.^3) 然后在matlab命令中输入以下内容 x=[]; y=[]; x0=[0.10.1,0.1]; [x0,resnorm]=lsqcurvefit(@fun1,x0,x,y); x0 输出了x0就是a、b、c三个未知数的值,就拟合出来了
兴宁市13979946025: matlab 已知x,y两组数据,求对应的z=f(x,y) - ?
习雪复方: 汗...基本格式啊..x=[-8:0.5:8];y=[-8:0.5:8]; 输入必须是一个标量和正方形的矩阵.
兴宁市13979946025: matlab求两数组元素两两相减 - ?
习雪复方: x=...; y=...; w=zeros(k,k); for i=1:k for j=1:k w(i,j)=x(i)-y(j); end end w
兴宁市13979946025: 在用matlab进行数值拟合时,在知道x,y两组数据后,怎样实现数据的拟合 除了用polyfit 函数外 - ?
习雪复方: lsqcurvefit(最小二乘拟合) fittype(ctool你和工具箱) nlinfit(非线性拟合) regress(线性回归) 上边这些都是matlab原装的拟合工具,你也可以去找第三方的,用法网上都很容易可以找到 不过一般来说,公式都是要自己给定的,给定了公式之后,根据数据估计参数
兴宁市13979946025: matlab拟合曲线:两组数据x=[1 2 3 4 5],y=[1 2 3 4 5],拟合成y=1/x*(1+(a/(bx+1))^c) - ?
习雪复方: a = 1.293e+004 (-5.756e+008, 5.756e+008) b = 9994 (-4.449e+008, 4.449e+008) c = -2.374 (-6.102, 1.354) 这是拟合结果 你把abc的初始值分别设为2、1、-1就可以了!该工具箱在这种自定义的拟合时,一般需要手动设置初始值.
兴宁市13979946025: 已知曲线x,y两组数据和R,k值,用matlab怎么求系数,需要详细步骤,谢谢! - ?
习雪复方: 已知曲线x,y两组数据和R,k值,用matlab求解其系数的步骤如下: 1、数据.x=[...];y=[...]; 2、自定义函数.func=@(a,x)模型表达式.例如:func=@(a,x)a(1)*x^2+a(2)*x+a(3),a(1)、a(2)、a(3)分别对应函数中各个系数. 3、初定初始值.x0=[a10,a20,a30] 4、用nlinfit函数或lsqcurvefit函数求解,模型系数a1,a2,a3. 5、用决定系数R²,判断拟合出来的模型系数a1,a2,a3是否合理.一般要求,R²≈1
兴宁市13979946025: matlab画图,已知x,y两组数据,在画出图形后把y中绝对值大于等于2的点用*特殊符号标注出来? - ?
习雪复方: x=[0:0.2:2.2]; y=[0.1 0.8 2.3 3.1 1.2 2.4 5.6 0.2 -2.3 1.8 -1.7 -4]; n=1; for m=1:length(y)if abs(y(m))>=2x1(n)=x(m);y1(n)=y(m);n=n+1;end end plot(x,y,x1,y1,'*')