微分方程與代數(shù)方程聯(lián)立,參數(shù)擬合問題求助
根據(jù)以下二式,利用最小二乘法擬合參數(shù)a,b,c,從而得到關(guān)于P的模型。
① P=a*[(lamb/x)^b/lamb-1/lamb*(x/lamb)^(0.5b)]
② dx/dt=(1/3/c)*a*[(lamb/x)^b-(x/lamb)^(0.5b)]
其中a,b,c為待求參數(shù)。試驗(yàn)數(shù)據(jù)lamb和P已知,其中l(wèi)amb范圍為[0.91,1]。x為中間變量。
目前不知該用什么函數(shù)實(shí)現(xiàn)上述目的,想請(qǐng)大家提供一些思路。
已寫程序如下,中間一段代碼思路應(yīng)該有問題,但不知如何改正
clear,clc
close all
format long;
lamb=[1;0.995;0.99;0.985;0.98;0.975;0.97;0.965;0.96;0.955;0.95;0.945;0.94;0.935;0.93;0.925;0.92;0.915;0.91] %試驗(yàn)值lamb
p=[0;-0.0166845;-0.0293383;-0.0433058;-0.0591614;-0.0761656;-0.0933141;-0.1099259;-0.1258601;-0.1414556;-0.1572909;-0.1738675;-0.1913200;-0.2092681;-0.2269212;-0.243560;-0.2595227;-0.2778129;-0.3064931]; %試驗(yàn)數(shù)據(jù)P
%fac為未知數(shù)向量,其中元素fac(1)=a,fac(2)=b,fac(3)=c
%lambv即中間變量x
fun=@(fac,lamb,lambv)(fac(1)*((lamb./lambv)^fac(2)./lamb-(lambv./lamb).^(fac(2)*0.5)./lamb));
odefun=@(fac,lamb,lambv)(1/3/fac(3)*(fac(1)*((lamb./lambv)^fac(2)-(lambv./lamb)^(0.5*fac(2)))));
tspan=[0.9,1];
lambv0=1;
[fac,lambv]=ode45(odefun,tspan,lambv0,[]);
fac0=[0.5 0.15 1]; %a,b,c初值
%最小二乘法擬合abc
coefind=fminsearch(@(fac)((sum(p(:,1)-fun(fac,lamb,lambv)))^2),coeffia0,optimset('MaxFunEvals',1e10,'MaxIter',1e6));
%擬合后的理論模型
p_model=coefind(1)*((lamb./lambv)^b./lamb-1/lamb*(lambv./lamb)^(0.5b))
err1=100*(p-p_model)/p
figure('color',[1 1 1])
plot(lamb,p,'-o');
hold on
plot(lamb,p_model,'--');
xlabel('主伸長率λ','fontsize',10);
ylabel('名義應(yīng)力P1(Mpa)','fontsize',10);
返回小木蟲查看更多
京公網(wǎng)安備 11010802022153號(hào)
一種方法是直接用哦的 ode15i 函數(shù)求解微分代數(shù)方程,然后用 非線性擬合函數(shù) 如lsqnonlin求解參數(shù)
第二種方法,將代數(shù)方程求導(dǎo)轉(zhuǎn)化為 微分方程,然后擬合微分方程組參數(shù)
您好,我嘗試了用ode15i求解,將中間部分的程序改成為下面所示,出現(xiàn)了報(bào)錯(cuò)。用ode15i求解式2時(shí),里面的系數(shù)abc是未知的,這樣可以求解出來嗎,感覺自己還是不太明白該怎么做。您空閑時(shí)可以幫忙看一下程序指點(diǎn)一下嗎
fun=@(fac,lamb,lambv)(fac(1)*((lamb./lambv)^fac(2)./lamb-(lambv./lamb).^(fac(2)*0.5)./lamb));
odefun=@(lambv,xp,fac,lamb)(xp-(1/3/fac(3))*(fac(1)*((lamb./lambv)^fac(2)-(lambv./lamb)^(0.5*fac(2)))));
tspan=lamb';
lambv0=1;
xp0=0;
[t,lambv]=ode15i(odefun,tspan,lambv0,xp0);
報(bào)錯(cuò):
索引超出數(shù)組元素的數(shù)目(1)。
出錯(cuò)
netBmodel2>@(lambv,xp,fac,lamb)(xp-(1/3/fac(3))*(fac(1)*((lamb./lambv)^fac(2)-(lambv./lamb)^(0.5*fac(2)))))
出錯(cuò) odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
出錯(cuò) ode15i (line 118)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, ...
出錯(cuò) netBmodel2 (line 22)
[t,lambv]=ode15i(odefun,tspan,lambv0,xp0);
,
我看了一下,缺少 時(shí)間 t 對(duì)應(yīng)的數(shù)據(jù),這個(gè)沒辦法進(jìn)行擬合的。
剛看到您的回復(fù),謝謝
您好,我補(bǔ)充了時(shí)間數(shù)據(jù),將數(shù)據(jù)和程序打包放在了壓縮文件里,可以請(qǐng)您幫我看一下嗎
鏈接: https://pan.baidu.com/s/1tC9MHP1l8a9bGkQVm8zRAA 提取碼: rv3r
幾次上傳附件都沒有成功,只能用網(wǎng)盤鏈接了