2

私は以下のコードをmatlabに持っています。計算した162行4列すべてをExcelファイルに書き出したい。

コードで xlswrite を使用すると、各反復ステップで P の値が上書きされるため、1 行と 4 列しか取得できません。

for ループ内で別のループを使用すると、実行時間が大幅に増加します。後でExcelファイルに書き込むことができる配列にPの値を少なくとも書き込むのを手伝ってください(「割り当てA(I)= Bで試したとき、BとIの要素数は同じでなければなりません」というエラーが表示されました.)

助けてください

function FitSMC_BC
clc
% Parameters: P(1)=theta_S; P(2)=theta_r; P(3)=psib; P(4)=lamda; 
smcdata=xlsread('asimdata');
nn=length(smcdata)-1;

for i=1:nn
    psi=smcdata(:,1);
    thetaObs=smcdata(:,i+1);
    %Make an initial guess:
    Pini=[0.5 0.1 -1 1.5];
    P=fminsearch(@ObFun,Pini,[],psi,thetaObs);
    disp(['result',num2str(i),': P=',num2str(P)]);
    theta=Gettheta(P,psi);
end

function OF=ObFun(P,psi,thetaObs)
theta=Gettheta(P,psi);
OF=sqrt(mean((theta - thetaObs).^2));

function theta=Gettheta(P,psi)
SoilPars.theta_S=P(1);
SoilPars.theta_r=P(2);
SoilPars.psib=P(3);
SoilPars.lamda=P(4);
[theta]=thetaFun(psi,SoilPars);

function [theta]=thetaFun(psi,SoilPars)
theta_S=SoilPars.theta_S;
theta_r=SoilPars.theta_r;
psib=SoilPars.psib;
lamda=SoilPars.lamda;
theta=theta_r+((theta_S-theta_r)*((psib./psi).^lamda));
theta(psi>psib)=theta_S;
4

3 に答える 3

1

P 行を次のように変更できます。

P(i,:) = fminsearch(@ObFun,Pini,[],psi,thetaObs);

P各計算 (4 要素ベクトル) を新しい行に格納します。

ループPの前に初期化することもできますforP = nan(nn, 4);

P次に、 を使用して Excel ファイルに書き込みますxlswrite

于 2014-02-22T00:32:00.613 に答える