1樓:匿名使用者
用函式lsqnonlin
你應該己知p, q, s, y, 對吧?擬合只是找他們的關係而己,實際上就是 y = f(p, q, s)
你需要先建乙個y_fun.m的function,比如
function res = y_fun(x);
global p q s y;
ymodel = f(p, q, s, x) ....你的p,q,s二次函式
res = y - ymodel;
然後執行
x = lsqnonline('y_fun',x0)
x0 是你猜的擬合係數的初始值
x 是擬合係數的解
補充:我之前說得不是很對,我改一下。
不過,我以前寫的就是**啊。。。我哭。。。我哪知道你的p,q,s二次函式什麼型啊?比如
ymodel = x(1)*p.^2 + x(2)*q.^2 + x(3)*s.^2 + x(4);
這裡面x就是四個項的係數,是你想擬合的。
*********************************************=
原來是這麼回事,我哭倒了,你早說不得了?這用得著這麼麻煩麼?幾行命令就解決了。看哥哥我教你。。。
y=x(1)*p.^2+x(2)*p+x(3)*q.^2+x(4)*q+x(5)*s.^2+x(6)*s+x(7);
y, p, q, s已知,為列向量(不要用行,不方便)。
sysmodel = [ones(length(p), 1) p.^2 p q.^2 q s.^2 s]
x = pinv(sysmodel)*y
這樣就直接算出x了,沒那些費勁的事情。。。
但是你這個sysmodel非常不穩定,原因在於p, q, s的數量級不一致,所以如果你想有效地進行pinv逆運算,最好把p,q,s全部化到乙個數量級上,比如p/3000, q/1000, s*100,再進行上面運算。算出來的x,再重新乘以相應的係數就可以復原了。比如p.
^2*x,那麼(p/3000).^2*xnew,這個xnew你現在知道了,那麼x就等於xnew/3000/3000.
慢慢消化吧~~
2樓:匿名使用者
functionname(varargin);
用varargin這個內建變數作為引數;
然後varargin,varargin這樣來引用第n個輸入引數。
matlab簡介:
matlab是美國mathworks公司出品的商業數學軟體,用於演算法開發、資料視覺化、資料分析以及數值計算的高階技術計算語言和互動式環境,主要包括matlab和simulink兩大部分。
matlab是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室)。是由美國mathworks公司釋出的主要面對科學計算、視覺化以及互動式程式設計的高科技計算環境。它將數值分析、矩陣計算、科學資料視覺化以及非線性動態系統的建模和**等諸多強大功能整合在乙個易於使用的視窗環境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案,並在很大程度上擺脫了傳統非互動式程式語言(如c、fortran)的編輯模式,代表了當今國際科學計算軟體的先進水平。
matlab怎麼將乙個函式作為引數傳到另乙個函式裡進行處理?
3樓:匿名使用者
在c/c++中,可以使用函式指標來實現,在matlab中,使用函式控制代碼。這時類似於函式指標的一項功能。例如:
自定義乙個函式如下,這個myfun.m函式是將要當做引數用的。
function f=myfun(x)
f=x.^2;
你知道這個.m檔案要放在**才能呼叫是吧。下面這個函式的引數就是函式:
function g=fun(f)
g=f(2)+f(3);
然後我在命令視窗輸入如下,出現結果:
>> f2=@myfun;
>> fun(f2)
ans =13
matlab中函式引數的問題?
4樓:春日野穹
使用匿名函式控制代碼就可以了
fmincon 需要的函式fun只有乙個輸入引數 fun(x)
而你的函式需要多乙個能改變的變數 那麼形式變成 myfun(p,x)
p就是你要傳遞的引數,x還是原來的輸入
當然首先,你得寫個m檔案,假設為myfun.m,其內容大致如下
function [out]=myfun,(p,x)
...........
end就是根據引數p和輸入x,求的輸出,當然名字可以自己取,然後就是主程式了
for p=p0:pn %引數p的取值
[x,fval]=fmincon(@(x) myfun(p,x),bt0,,,,,lb,ub,@constr);
.......
end其中關鍵就是@(x) myfun(p,x)
這會返回乙個匿名的函式控制代碼,會使用當時的p值代入myfun
得到乙個只有乙個輸入x的函式,這樣就能把額外的引數傳遞給需要優化的函式
如果你的函式有等多的引數例如
myfun(a,b,c,x)
a=..
b=..
c=..
同樣用@(x) myfun(a,b,c,x)把a,b,c引數的值傳給要優化的函式
在以上的基礎上,加幾句,儲存每次的引數p和對應的優化結果
然後畫圖就可以了
打字不易,如滿意,望採納。
5樓:柘薰
function y=shorpath(a,s,t)if nargin<3
%t設定預設值
if nargin<2
%s設定初值
if nargin<1
%全部引數預設初值設定
%或者提示error
endend
end%函式體
%......
end函式一般都是這麼寫的,所以呼叫shorpath(a,s)一般而言t都是採取的程式設定好的預設值。
matlab中函式引數的問題,matlab非線性規劃fmincon函式中目標函式引數傳遞問題,怎麼解?
使用匿名函式控制代碼就可以了 fmincon 需要的函式fun只有乙個輸入引數 fun x 而你的函式需要多乙個能改變的變數 那麼形式變成 myfun p,x p就是你要傳遞的引數,x還是原來的輸入 當然首先,你得寫個m檔案,假設為myfun.m,其內容大致如下 function out myfun...
如何編寫matlab函式檔案,使輸入引數a,b分別為矩形的長
function srect srect a,b switch nargin case 1 srect a a case 2 srect a b otherwise disp 請輸入矩形的長和寬資料!end function m,n rectangle statistics a,b 輸入變數為a,b...
新手求教MATLAB儲存問題,求教matlab問題
將 檔案型別改成jpg試試,即。這個名字,其中。fig 檔案,matlab是不知道有這種檔案型別的,建議換一種比較通用的 檔案型別例如jpg或png等。matlab問題,語句不用太多,較簡單,我是新手,求教。新手求指教,matlab有錯誤,求詳細講解,真心做不出來了 你把對a,b,c,da,db,d...