matlab 拟合程序怎么编写

来源:百度知道 编辑:UC知道 时间:2024/06/08 02:16:15
有自变量,应变量两组数。
20 0.6813
37 0.6027
54 0.4236
71 0.2771
105 0.199
122 0.1665
139 0.1354
156 0.1172
173 0.0973
190 0.0772
207 0.061
224 0.0392
241 0.0364
258 0.0235
275 0.0106
公式是y=1-exp((-a*x)^b)
公式很简单。但由于一个常数b为指数,且括号内有自变量,所以好像需要自己解方程先。对线性代数不懂。不知道如何把指数扩展成多项式。
我的程序目前是这样的。
clc;clear
load ct.m
x=ct(:,1);
y=ct(:,2);
fx =inline('1-exp((-a(1)*x)^a(2))','a','x')
a=nlinfit(x,y,fx,[1 1])
其中两列数据放在ct.m里面。
用a来放置常数a(1),a(2).
但a=nlinfit(x,y,fx,[1 1])这个通不过。
不知道哪位高手能写出完整matlab代码。
非常感谢。^_^

定义一个myfun.m的m文件,保存:

function f = myfun(par);

data = [20 0.6813
37 0.6027
54 0.4236
71 0.2771
105 0.199
122 0.1665
139 0.1354
156 0.1172
173 0.0973
190 0.0772
207 0.061
224 0.0392
241 0.0364
258 0.0235
275 0.0106];

x = data(:, 1);
y = data(:, 2);

for i = 1:length(x),
wow = par(1)*x(i);
yfit(i,1) = 1 - exp(wow^-1);
end

temp = y - yfit;

f = temp'*temp;

temp = y - yfit;

f = temp'*temp;

主窗口里面运行:

options = optimset('MaxFunEvals', 1e6, 'Maxiter', 1e6);

[par, fval] = fminsearch(@myfun, -0.05);

验证:

x = data(:, 1);
y = data(:, 2);

for i = 1:length(x),
wow = par(1)*x(i);
yfit(i,1) = 1 - exp(wow^-1);
end

plot(yfit); hold on; plot(y, 'r.');
<