我打算用matlab中的lsqcurvefit拟合拟合我自定义的一个函数,比较复杂,有微分也有积分,还是二元,我感觉是积分或者微分时是的输入矩阵变形导致后续矩阵不一致而出错。目前还是试验阶段,所以数据是网上找的,需要你拟合的参数因为函数复杂且比较多,有最多是十一个,所以不知道具体范围。
这是我的主函数:
clc;
clear;
X(:,1) = xlsread('test_data.xls','Sheet1','I99:I2449');
f = xlsread('test_data.xls','Sheet1','H99:H2449');
[NUM,TXT] = xlsread('test_data.xls','Sheet1','B99:B2449');
X(:,2) = cellfun(@str2num,TXT);
x0 = ones(11,1).*rand(11,1);
%model =Mooney_Rivilin_5(X(:,1),X(:,2));
[beta,R,J] = lsqcurvefit(@Mooney_Rivilin_5,x0,X,f);
这是我的自定义函数:
%Mooney-Rivlin_5 Calculator
function sigma=Mooney_Rivilin_5(x,t) %C is Initial shear modulus 单位Pa
%Paramters defined as variables, stretch(strain) defined as variable x
syms x t c10 c01 c20 c11 c02 s1 s2 s3 t1 t2 t3 s
% First and Second Invariants Defined
% x is strain
y=((x.^2)+(2/x));
z=((2*x)+(x.^-2));
f1=c10*(y-3)+c01*(z-3)+c11*((y-3).*(z-3))+c20*((y-3).^2)+c02*((z-3).^2);
f2=1+s1*exp((s-t)/t1)+s2*exp((s-t)/t2)+s3*exp((s-t)/t3);
f3=2*diff(f1).*f2;
%% Derivative Taken
sigma=2*diff(f1)+int(f3,s,0,t); % about x and t function
end
所用到的数据:https://www.aliyundrive.com/s/US47zhw9g9T%E3%80%82%E9%98%BF%E9%87%8C%E4%BA%91%E7%9B%98%E6%89%93%E5%BC%80%E3%80%82
如果有熟悉的码友,辛苦花几分钟帮帮忙!!