matlab編程方程
A. 用MATLAB進行函數方程組編程
x=fsolve(@fun,x0)求解fun(x)=0的解,x0是初值,fun是函數,x就是解
因為fsolve使用迭代法求解方程的,所以總要有個迭代的初值吧,這個初值就是你給的x0。
比如解方程組
x(1).^2+x(2).^2=1
x(1)=2*x(2)
可以寫成
x=fsolve(f,[1 1])
這里[1 1]就是初值,其實初值一般情況下可以隨便給的初值不同,結果不一定相同。 網路一下,你就知道。
B. 用matlab編程求解方程組
用matlab求解帶求和問題的方程組的求解思路:考慮到問題是離散型的,可以由已知的T值,利用for循環語句求和,再用fsolve()或lsqnonlin()求解其r和s的數值解。
題主的自定義函數myfun(x)的內容。其中T值是為了解題而定的。
C. matlab編寫方程
先求Ct-t的關系
y=dsolve('Dy-k*(24.8-y)^2=0')
y=
124/5
124/5-1/(25*(C1+(k*t)/25))
再用matlab擬合參數k和C1
t=[0,1,6,12,18,24,30,36,42,48,54,60,72]';
Ct=[24.823.8666723.2733321.6733318.4866716.2066713.93333...
7.706675.986674.406671.593330.666670]';
ft_=fittype('124/5-1/(25*(C1+(k*t)/25))',...
'dependent',{'Ct'},'independent',{'t'},...
'coefficients',{'k','C1'});
st=[-0.0010.4]
[curve,goodness]=fit(t,Ct,ft_,'Startpoint',st)
figure,plot(t,Ct,'*'),holdon,
plot(curve,'predobs',0.99);
st=
-0.00100.4000
curve=
Generalmodel:
curve(t)=124/5-1/(25*(C1+(k*t)/25))
Coefficients(with95%confidencebounds):
k=-0.001356(-0.002203,-0.0005092)
C1=0.005256(0.003034,0.007479)
goodness=
sse:348.0195
rsquare:0.6773
dfe:11
adjrsquare:0.6480
rmse:5.6248
D. matlab中如何對方程進行編程求解啊
disp('方程形式:a*x^2+b*x+c=0'); a=input('a='); b=input('b='); c=input('c='); p=[abc]; ans=roots(p) 哥們Mablab輸出結元二次方程根
E. 求MATLAB解方程編程
思路:對等式兩邊求導,變成
二階微分方程
,然後求解。
clc;clear
v=dsolve('D2v=25/8*v')
%v(0)=0
f1=subs(v,'t',0)-0;
f2=subs(v,'t','t0')-80;
[C1,C2]=solve(f1,f2,'C1,C2');
v=subs(v)
f3=int(v,0,'t0')-8;
t0=solve(f3)
t0=eval(t0)
%驗算v(t0)=80
vt0=subs(v,'t',t0);
test_vt0=vpa(subs(vt0))
結果:
v
=
C1*exp(5/4*2^(1/2)*t)+C2*exp(-5/4*2^(1/2)*t)
v
=
80/(exp(5/4*2^(1/2)*t0)-exp(-5/4*2^(1/2)*t0))*exp(5/4*2^(1/2)*t)-80/(exp(5/4*2^(1/2)*t0)-exp(-5/4*2^(1/2)*t0))*exp(-5/4*2^(1/2)*t)
t0
=
2/5*log(8/31*2^(1/2)+33/31)*2^(1/2)
t0
=
0.2021
test_vt0
=
80.
F. 使用matlab編程求解方程
如何使用matlab編程求出圖中方程的解,對於圖中的方程用solve()和vpasolve()函數求解,並不能讓我們得到所有的解。那如何去得到呢?
首先,我們試著用繪制函數(ezplot,plot),繪出其圖形,此時我們可以看到,該方程有兩個解,即x在0和1.5的附近有解。
然後,用vpasolve函數一個一個地去求。
實現代碼:
syms x
ezplot(sin(x)-x^2/2,[-5,5]) %繪圖
grid on %打網格線
x1 = vpasolve(sin(x)-x^2/2 == 0, x , 0) %求x在0附近的解
x2 = vpasolve(sin(x)-x^2/2 == 0, x , 1.5) %求x在1.5附近的解
執行結果如圖所示。
G. 怎樣用Matlab編寫方程組程序。。。
拉格朗日function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s;end SOR迭代法的Matlab程序 function [x]=SOR_iterative(A,b)% 用SOR迭代求解線性方程組,矩陣A是方陣 x0=zeros(1,length(b)); % 賦初值 tol=10^(-2); % 給定誤差界 N=1000; % 給定最大迭代次數 [n,n]=size(A); % 確定矩陣A的階 w=1; % 給定鬆弛因子 k=1; % 迭代過程 while k<=N x(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1); for i=2:n x(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i); end if max(abs(x-x0))<=tol fid = fopen('SOR_iter_result.txt', 'wt'); fprintf(fid,'\n********用SOR迭代求解線性方程組的輸出結果********\n\n'); fprintf(fid,'迭代次數: %d次\n\n',k); fprintf(fid,'x的值\n\n'); fprintf(fid, '%12.8f \n', x); break; end k=k+1; x0=x; end if k==N+1 fid = fopen('SOR_iter_result.txt', 'wt'); fprintf(fid,'\n********用SOR迭代求解線性方程組的輸出結果********\n\n'); fprintf(fid,'迭代次數: %d次\n\n',k); fprintf(fid,'超過最大迭代次數,求解失敗!'); fclose(fid); end Matlab中龍格-庫塔(Runge-Kutta)方法原理及實現龍格-庫塔(Runge-Kutta)方法是一種在工程上應用廣泛的高精度單步演算法。由於此演算法精度高,採取措施對誤差進行抑制,所以其實現原理也較復雜。該演算法是構建在數學支持的基礎之上的。龍格庫塔方法的理論基礎來源於泰勒公式和使用斜率近似表達微分,它在積分區間多預計算出幾個點的斜率,然後進行加權平均,用做下一點的依據,從而構造出了精度更高的數值積分計算方法。如果預先求兩個點的斜率就是二階龍格庫塔法,如果預先取四個點就是四階龍格庫塔法。一階常微分方程可以寫作:y'=f(x,y),使用差分概念。(Yn+1-Yn)/h= f(Xn,Yn)推出(近似等於,極限為Yn')Yn+1=Yn+h*f(Xn,Yn)另外根據微分中值定理,存在0<t<1,使得Yn+1=Yn+h*f(Xn+th,Y(Xn+th))這里K=f(Xn+th,Y(Xn+th))稱為平均斜率,龍格庫塔方法就是求得K的一種演算法。利用這樣的原理,經過復雜的數學推導(過於繁瑣省略),可以得出截斷誤差為O(h^5)的四階龍格庫塔公式:K1=f(Xn,Yn);K2=f(Xn+h/2,Yn+(h/2)*K1);K3=f(Xn+h/2,Yn+(h/2)*K2);K4=f(Xn+h,Yn+h*K3);Yn+1=Yn+h*(K1+2K2+2K3+K4)*(
H. 這個方程應該怎樣在MATLAB中編程,並輸出自變數的值
題主給出的方程實際上是一個最優化極值問題,極值問題可以用fmincon()函數或ga()函數等去求解。
如用fmincon()函數求解,可以按下列方法來解決:
1、自定義目標函數,其內容
y=9*x1+14*x2+202*x3+8*x4+6*x5+3*x6+354*x7;
2、自定義約束條件函數,其內容
c(1)=x6-x3;
c(2)=x6-x7;
ceq = x1+x2+x3+x4+x5+x6+x7-1;
3、確定x1、x2、x3、x4、x5、x6、x7 的上下限,即
lb=[0,0,0,0,0,0,0];
ub=[1,1,1,1,1,1,1];
4、使用fmincon()函數,得到x1、x2、x3、x4、x5、x6、x7 的值以及其極值(該問題為最小值等於6)
5、驗證約束條件是否成立。即
disp('驗證:x3>x6')
。。。
disp('驗證:x7>x6')
。。。
disp('驗證:A=x1+x2+x3+x4+x5+x6+x7=1')
。。。
6、編程後執行,得到如下值。
I. 用maltab解方程
關於MALTAB解方程的詳細解答方法,具體的操作如下:
用matlab解方程組的問題,其實在matlab中解方程組還是很方便的,例如,對於代數方程組Ax=b(A為系數矩陣,非奇異)的求解,MATLAB中有兩種方法:
(1)x=inv(A)*b — 採用求逆運算解方程組;
(2)x=A\B — 採用左除運算解方程組
PS:使用左除的運算效率要比求逆矩陣的效率高很多~
2、變參數非線性方程組的求解
對於求解非線性方程組一般用fsolve命令就可以了,但是對於方程組中某一系數是變化的
3、非線性方程數值求解
matlab里solve如何使用,是否有別的函數可以代替它.
在matlab裡面solve命令主要是用來求解代數方程(即多項式)的解,但是也不是說其它方程一個也不能解,不過求解非代數方程的能力相當有限,通常只能給出很特殊的實數解。(該問題給出的方程就是典型的超越方程,非代數方程)
從計算機的編程實現角度講,如今的任何演算法都無法准確的給出任意非代數方程的所有解,但是我們有很多成熟的演算法來實現求解在某點附近的解。
matlab也不例外,它也只能給出任意非代數方程在某點附近的解,函數有兩個:fzero和fsolve,具體用法請用help或doc命令查詢吧。
如果還是不行,你還可以將問題轉化為非線性最優化問題,求解非線性最優化問題的最優解,可以用的命令有:fminbnd, fminsearch, fmincon等等。
*非線性方程數值求解
*單變數非線性方程求解
在MATLAB中提供了一個fzero函數,可以用來求單變數非線性方程的根。該函數的調用格式為:
z=fzero('fname',x0,tol,trace)
其中fname是待求根的函數文件名,x0為搜索的起點。一個函數可能有多個根,但fzero函數只給出離x0最近的那個根。
tol控制結果的相對精度,預設時取tol=eps,trace�指定迭代信息是否在運算中顯示,為1時顯示,為0時不顯示,預設時取trace=0。
J. matlab編程求解方程組
如何求解多組二元一次方程組呢?題主的想法是對的,是要用循環來求解,其求解過程:
1、首先將t,h數據賦值給t1,h1,即
t1=tan(t);
h1=h.^2;
2、使用for循環語句,求解t(i),h(i)對應的a,b值,即
for i=1:6
i
t=t1(i);h=h1(i);
syms a b
eqn1 = a > 0;
eqn2 = b/a==t;
eqn3 = a^2+b^2==h;
eqns = [eqn1 eqn2 eqn3];
S = solve(eqns,[a b]);
a=vpa(S.a)
b=vpa(S.b)
end
3、運行上述代碼,可以得到如下結果。