matlab function使用問題

想請問一下

我想要利用function產生一個f(S)的函數S裡面又有t變數,想要變成f(S(t+1))函數

此函數表示如下:

f(S(t+1)) = S(t)+0.5*3600*(I(t)+I(t+1))-0.5*3600*(Q(t)+((S(t+1)/k)^(1/p))/3600)-S(t+1)

假設我有10筆資料

已知資料為I(10),S(1),Q(1),(k=3,p=1)

利用牛頓法推求S(t+1)

最後求出10組>>>S(10)

想請問我寫(檔名:f_S)funtion Y=f_S(S(t+1)

Y = S(t)+0.5*3600*(I(t)+I(t+1))-0.5*3600*(Q(t)+((S(t+1)/k)^(1/p))/3600)-S(t+1)

S裡面的變數隨著t改變,這樣我要在寫是對的嗎?是要在令什麼嗎?將這funtion替換

到下面方程式中

似乎會發生錯誤(Not enough input arguments),可以指點一下迷津嗎?

方程式中變數的影響關係

之前是沒用function這用法自己用牛頓法原理寫出來求出來的

附上一小段我寫的

I = load('XXX.txt')

Q = 56;

S = 3600*k*Q^p;

for t =1:10

error = 10;

Sg = 200000;% S(t+1)

while abs(error)>0.01

fs =S(t)+0.5*3600*(I(t)+I(t+1))-0.5*3600*(Q(t)+((Sg/k)^(1/p))/3600)-Sg;

%f(S(t+1))

fs_1 = S(t)+0.5*3600*(I(t)+I(t+1))-0.5*3600*(Q(t)+((1.01*Sg/k)^(1/p))/3

600)

-1.01*Sg; %f(1.01S(t+1))

fs_dif = [fs_1-fs]/(0.01*Sg); %微分項公式

S_new = Sg-(fs/fs_dif); %新猜測

error = S_new-Sg

Sg = S_new;

end

S = [S;Sg];

Q_new = (Sg/k)^(1/p)/3600;

Q = [Q;Q_new];

end

2 個解答

評分
  • Elisha
    Lv 6
    7 年前
    最佳解答

    我想你的牛頓法應該沒有問題,問題出在S(t), Q(t), I(t)

    通常S(t)代為S為t的涵數,我們必需給他一個關係式,例如

    S(t) = 1 - t^2 + sqrt(t);

    否則無法再繼續往下計算。

  • 匿名使用者
    7 年前

    >這里很不錯aaashops。com老婆很喜歡

    剄刄凅唩之

還有問題?馬上發問,尋求解答。