1. matlab 鏈灏忎簩涔樻硶鎷熷悎
涓昏佺殑闂棰樻槸inline鍑芥暟鍐欐硶涓嶅癸紝matlab涓嶈兘璇嗗埆涓嬮潰鐨勫啓娉曪細
f=inline('R*exp(-a*x)','[Ra]','x');
鍍忚繖绉嶆湁澶氫釜寰呰鲸璇嗗弬鏁扮殑鎯呭喌锛屽簲璇ュ啓鎴愪竴涓鍚戦噺锛屽
f=inline('c(1)*exp(-c(2)*x)','c','x');
鍙傝冧唬鐮侊細
%鐢熸垚娴嬭瘯鏁版嵁
t=linspace(0,2*pi,50);
x=1.5*cos(t);
y=1.5*sin(t);
plot(x,y)
holdon
t=linspace(0,pi,30);
r=1.5*exp(-1*t)+0.02*randn(size(t));%鏁版嵁涓鍔犲叆鍣澹
x=r.*cos(t);
y=r.*sin(t);
plot(x,y,'r')
axisequal
%curvefit
[theta,rho]=cart2pol(x,y);%transformintopolarcoord
idx=(x<=eps)&(y<=eps);
theta(idx)=[];
rho(idx)=[];
f=inline('c(1)*exp(-c(2)*x)','c','x');
[BestPara,resnorm,resil]=lsqcurvefit(f,[1.51],theta,rho);
R=f(BestPara,theta);
X=R.*cos(theta);
Y=R.*sin(theta);
plot(X,Y,':g')
legend('鍦','鍘熷嬫暟鎹','鎷熷悎鏁版嵁');
缁撴灉濡傚浘锛
2. 最小二乘法的matlab程序是怎样的
我给你个最小二乘拟合的例子自己体会一下:
下面给定的是乌鲁木齐最近1个月早晨7:00左右(新疆时间)的天气预报所得到的温度数据表,按照数据找出任意次曲线拟合方程和它的图像。
(2008年10月26~11月26)
天数 1 2 3 4 5 6 7 8 9 10
温度 9 10 11 12 13 14 13 12 11 9
天数 11 12 13 14 15 16 17 18 19 20
温度 10 11 12 13 14 12 11 10 9 8
天数 21 22 23 24 25 26 27 28 29 30
温度 7 8 9 11 9 7 6 5 3 1
下面应用Matlab编程对上述数据进行最小二乘拟合
Matlab程序代码:
x=[1:1:30];
y=[9,10,11,12,13,14,13,12,11,9,10,11,12,13,14,12,11,10,9,8,7,8,9,11,9,7,6,5,3,1];
a1=polyfit(x,y,3) %三次多项式拟合%
a2= polyfit(x,y,9) %九次多项式拟合%
a3= polyfit(x,y,15) %十五次多项式拟合%
b1= polyval(a1,x)
b2= polyval(a2,x)
b3= polyval(a3,x)
r1= sum((y-b1).^2) %三次多项式误差平方和%
r2= sum((y-b2).^2) %九次次多项式误差平方和%
r3= sum((y-b3).^2) %十五次多项式误差平方和%
plot(x,y,'*') %用*画出x,y图像%
hold on
plot(x,b1, 'r') %用红色线画出x,b1图像%
hold on
plot(x,b2, 'g') %用绿色线画出x,b2图像%
hold on
plot(x,b3, 'b:o') %用蓝色o线画出x,b3图像%
3. 用MATLAB解决最小二乘解的题
这个题目本质上就是个二次函数的求极值问题。
(1)首先将式子化简
如图
(2)代入下列函数中函数中
2.1
最速下降法子函数(代码)
2.2
拟牛顿法(对秩1
子函数代码)
2.3
bfgs子函数代码
2.3
dfp(子函数代码)
(3)上述过程包含了计算的步骤,可以用optimtool设置方法来求解并得到过程。本来想给你结果的,分数太少,就不写上去了。
4. 鐢ㄦ渶灏忎簩涔樻硶鍦∕ATLAB涓鎷熷悎鏇茬嚎
浣犲ソ锛
鏃㈢劧y=ax^b
閭d箞ln(y)=bln(x)+lna;
涓嬮潰鏄鎴戠殑浠g爜锛
clc;clear all
x=[66.52 28.08 37.61 26.68 56.52 22.71 113.163 34.33 48.48 56.18 78.23 43.7 16.75 151.02];
y=[15.03 35.67 27.06 41.3 17.59 47.79 9.64 32.03 24.21 20.31 13.23 25.38 64.17 7.49];
x1=log(x);
y1=log(y);
p=polyfit(x1,y1,1);
b=p(1);
a=exp(p(2));
fprintf('a=%f ',a);fprintf('b=%f ',b);
hold on
plot(x,a*(x.^b),'*')
plot(x,y,'r.')
legend('鎷熷悎鍚庣殑鐐','鎷熷悎鍓嶇殑鐐')
鏈鍚庣畻鍑烘潵鐨勭粨鏋滄槸锛
a=1036.841810
b=-0.990830
鍥剧墖锛