| 9 | 1/1 | 返回列表 |
| 查看: 1861 | 回復(fù): 8 | |||
makechange74鐵蟲(chóng) (小有名氣)
|
[求助]
用Gauss-Neuton算法解非線形最小二乘法問(wèn)題 已有1人參與
|
|
自己根據(jù)網(wǎng)上下載源代碼修改的高斯-牛頓迭代法求非線形最小二乘問(wèn)題,老是顯示輸入?yún)?shù)不足。注釋是根據(jù)自己理解填寫的 m文件代碼如下: function [x,minf] = GN(f,x0,var,eps) format long; if nargin == 3 %如果沒(méi)有設(shè)置eps,則eps=1.0e-6 eps = 1.0e-6; end S = transpose(f)*f; %trnspose是轉(zhuǎn)置,求得r方 k = length(f); % n = length(x0); %n為變量個(gè)數(shù),但是沒(méi)用到? x0 = transpose(x0); %將行向量轉(zhuǎn)置為列向量 tol = 1; %初始容差 A = jacobian(f,var); while tol>eps Fx = zeros(k,1); for i=1:k Fx(i,1) = subs(f(i),var,x0); end Sx = subs(S,var,x0); %求得f轉(zhuǎn)置與其本身值, Ax = subs(A,var,x0); %雅克比矩陣的值 gSx = transpose(Ax)*Fx; dx = -transpose(Ax)*Ax\gSx; x0 = x0 + dx; tol = norm(dx); %tol=dx絕對(duì)值之和 end minf = subs(S,var,x); format short; x = x0; end 命令窗口調(diào)用如下: xdata = S1o; %S1o及下面的ydata1都是自己的數(shù)據(jù) syms z1 z2 z3 z4 z5 f = ydata1 - exp(z1)./(exp(z1)+exp(-z1)).*exp(-(xdata./exp(z3)).^exp(z2))+(1-exp(z1)./(exp(z1)+exp(-z1))).*exp(-(xdata./exp(z5)).^exp(z4)); x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257]; var = findsym(f); eps = 1.0e-3; >> GN 提示錯(cuò)誤如下: 錯(cuò)誤使用 GN (line 6) 輸入?yún)?shù)的數(shù)目不足。 |
source |
金蟲(chóng) (小有名氣)
鐵蟲(chóng) (小有名氣)
|
function [x,minf] = GN(f,x0,var,eps) format long; if nargin == 3 %如果沒(méi)有設(shè)置eps,則eps=1.0e-6 eps = 1.0e-6; end m = 0; S = transpose(f)*f; %trnspose是轉(zhuǎn)置,求得r方 k = length(f); % %n = length(x0); %n為變量個(gè)數(shù),但是沒(méi)用到。 x0 = transpose(x0); %將行向量轉(zhuǎn)置為列向量 tol = 1; %初始容差 A = jacobian(f,var); while tol>eps Fx = zeros(k,1); for i=1:k Fx(i,1) = subs(f(i),var,x0); end Sx = subs(S,var,x0); %求得f轉(zhuǎn)置與其本身值, Ax = subs(A,var,x0); %雅克比矩陣的值 gSx = transpose(Ax)*Fx; dx = -transpose(Ax)*Ax\gSx; x0 = x0 + dx; tol = norm(dx); %tol=dx絕對(duì)值之和 m = m+1; if(m>100000) disp('迭代步數(shù)太多,可能不收斂'); return; end end minf = subs(S,var,x); format short; x = x0; end xdata = S1o; f = ydata1 - exp(z1)./(exp(z1)+exp(-z1)).*exp(-(xdata./exp(z3)).^exp(z2))+(1-exp(z1)./(exp(z1)+exp(-z1))).*exp(-(xdata./exp(z5)).^exp(z4)); x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257]; var = findsym(f); eps = 1.0e-3; GN(f,x0,var,eps) 從 sym 轉(zhuǎn)換為 double 時(shí)出現(xiàn)以下錯(cuò)誤: 出錯(cuò) GN (line 17) Fx(i,1) = subs(f(i),var,x0); 又出新問(wèn)題了,還是麻煩能夠解答一下 以下是數(shù)據(jù) S1o:0.0580000000000000 0.0710000000000000 0.0760000000000000 0.0790000000000000 0.0830000000000000 0.0870000000000000 0.0980000000000000 0.111000000000000 0.117000000000000 0.122000000000000 0.122000000000000 0.133000000000000 0.134000000000000 0.138000000000000 0.140000000000000 0.142000000000000 0.150000000000000 0.155000000000000 0.160000000000000 0.160000000000000 0.168000000000000 0.173000000000000 0.173000000000000 0.173000000000000 0.175000000000000 0.176000000000000 0.177000000000000 0.181000000000000 0.182000000000000 0.183000000000000 0.194000000000000 0.203000000000000 0.214000000000000 0.218000000000000 0.222100000000000 0.223000000000000 0.225000000000000 0.247000000000000 0.253000000000000 0.256000000000000 0.257000000000000 0.258000000000000 0.262000000000000 0.263000000000000 0.264000000000000 0.266000000000000 0.267000000000000 0.276000000000000 0.278000000000000 0.280000000000000 0.288000000000000 0.289000000000000 0.306000000000000 0.315000000000000 0.333000000000000 0.335000000000000 0.353000000000000 0.389000000000000 0.404000000000000 0.418000000000000 0.456000000000000 0.489000000000000 ydata1: 0.983870967741936 0.967741935483871 0.951612903225807 0.935483870967742 0.919354838709677 0.903225806451613 0.887096774193548 0.870967741935484 0.854838709677419 0.838709677419355 0.822580645161290 0.806451612903226 0.790322580645161 0.774193548387097 0.758064516129032 0.741935483870968 0.725806451612903 0.709677419354839 0.693548387096774 0.677419354838710 0.661290322580645 0.645161290322581 0.629032258064516 0.612903225806452 0.596774193548387 0.580645161290322 0.564516129032258 0.548387096774193 0.532258064516129 0.516129032258064 0.500000000000000 0.483870967741935 0.467741935483871 0.451612903225806 0.435483870967742 0.419354838709677 0.403225806451613 0.387096774193548 0.370967741935484 0.354838709677419 0.338709677419355 0.322580645161290 0.306451612903226 0.290322580645161 0.274193548387097 0.258064516129032 0.241935483870968 0.225806451612903 0.209677419354839 0.193548387096774 0.177419354838710 0.161290322580645 0.145161290322581 0.129032258064516 0.112903225806452 0.0967741935483870 0.0806451612903230 0.0645161290322580 0.0483870967741930 0.0322580645161290 0.0161290322580639 0 |
金蟲(chóng) (小有名氣)
鐵蟲(chóng) (小有名氣)
金蟲(chóng) (小有名氣)
鐵蟲(chóng) (小有名氣)
|
一直在關(guān)注帖子,可就是沒(méi)看到回復(fù),真是囧。。 按照你的建議試了試,如果在命令窗口中輸入syms x0(1) 則會(huì)提醒錯(cuò)誤使用syms,如果只定義syms x0,令yfitdata=exp(x0(1))./(exp(x0(1))+exp(-x0(1))).*exp(-(xdata./exp(x0(3))).^exp(x0(2)))+(1-exp(x0(1))./(exp(x0(1))+exp(-x0(1)))).*exp(-(xdata./exp(x0(5))).^exp(x0(4)));也會(huì)提醒錯(cuò)誤, 在輸入命令時(shí),應(yīng)該是不允許()作為變量;但是如果將yfitdata(我函數(shù)名稱寫的是R)作為一個(gè)函數(shù)寫在m文件中, function F = R(x0,xdata) F = exp(x0(1))./(exp(x0(1))+exp(-x0(1))).*exp(-(xdata./exp(x0(3))).^exp(x0(2)))+(1-exp(x0(1))./(exp(x0(1))+exp(-x0(1)))).*exp(-(xdata./exp(x0(5))).^exp(x0(4))); 調(diào)用如下: syms x0 >> x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257]; >> xdata = S1o; >> f = 0.5.*(ydata1 - R(x0,xdata)).^2; 錯(cuò)誤使用 sym>checkindex (line 1545) Index must be a positive integer or logical. 出錯(cuò) sym>privformatmatrix (line 1503) checkindex(x); 出錯(cuò) sym>privformat (line 1478) s = privformatmatrix(x); 出錯(cuò) sym/subsref (line 685) [inds{k},refs{k}] = privformat(inds{k}); 真是不知道該怎么辦了? 此外,按照最原本程序,錯(cuò)誤提醒的是從 sym 轉(zhuǎn)換為 double 時(shí)出現(xiàn)以下錯(cuò)誤: 是不是跟sym定義的類型有關(guān),這個(gè)問(wèn)題還不是很明白,網(wǎng)絡(luò)找的資源只有源程序,沒(méi)有對(duì)應(yīng)例子,對(duì)于新手還是有些困難 |
金蟲(chóng) (小有名氣)
鐵蟲(chóng) (小有名氣)
| 9 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 317求調(diào)劑 +12 | 申子申申 2026-03-19 | 18/900 |
|
|---|---|---|---|---|
|
[考研] 298求調(diào)劑一志愿211 +3 | 上岸6666@ 2026-03-20 | 3/150 |
|
|
[考研] 一志愿北京化工大學(xué)070300 學(xué)碩336求調(diào)劑 +5 | vv迷 2026-03-21 | 8/400 |
|
|
[考博] 招收博士1-2人 +3 | QGZDSYS 2026-03-18 | 4/200 |
|
|
[考研] 0856材料專碩353求調(diào)劑 +4 | NIFFFfff 2026-03-20 | 4/200 |
|
|
[考研] 286分人工智能專業(yè)請(qǐng)求調(diào)劑愿意跨考! +4 | lemonzzn 2026-03-17 | 8/400 |
|
|
[考研] 材料求調(diào)劑 +5 | @taotao 2026-03-21 | 5/250 |
|
|
[考研] 302求調(diào)劑 +12 | 呼呼呼。。。。 2026-03-17 | 12/600 |
|
|
[考研] 336求調(diào)劑 +5 | rmc8866 2026-03-21 | 5/250 |
|
|
[考研] 求調(diào)劑 +3 | .m.. 2026-03-21 | 4/200 |
|
|
[考研] 一志愿山大07化學(xué) 332分 四六級(jí)已過(guò) 本科山東雙非 求調(diào)劑! +3 | 不想理你 2026-03-16 | 3/150 |
|
|
[考研] 一志愿中國(guó)石油大學(xué)(華東) 本科齊魯工業(yè)大學(xué) +3 | 石能偉 2026-03-17 | 3/150 |
|
|
[考研] 一志愿西南交大,求調(diào)劑 +5 | 材化逐夢(mèng)人 2026-03-18 | 5/250 |
|
|
[考研] 22408 344分 求調(diào)劑 一志愿 華電計(jì)算機(jī)技術(shù) +4 | solanXXX 2026-03-20 | 4/200 |
|
|
[考研] 290求調(diào)劑 +7 | ^O^乜 2026-03-19 | 7/350 |
|
|
[考研] 材料學(xué)碩297已過(guò)四六級(jí)求調(diào)劑推薦 +11 | adaie 2026-03-19 | 11/550 |
|
|
[考研] 一志愿西安交通大學(xué) 學(xué)碩 354求調(diào)劑211或者雙一流 +3 | 我想要讀研究生 2026-03-20 | 3/150 |
|
|
[考研] 288求調(diào)劑,一志愿華南理工大學(xué)071005 +5 | ioodiiij 2026-03-17 | 5/250 |
|
|
[考研] 【同濟(jì)軟件】軟件(085405)考研求調(diào)劑 +3 | 2026eternal 2026-03-18 | 3/150 |
|
|
[考研] 0703化學(xué)調(diào)劑 +3 | 妮妮ninicgb 2026-03-17 | 3/150 |
|