matlab龍貝格演算法
1. MATLAB用龍貝格積分演算法計算f=x^2在0到1上的積分
f = @(x) x.*x % f是被積函數
a = 0;b = 1; % a,b分別是積分的上下限
n = 5; % n+1是T數表的列數
delta = 10^(-8); % 允許誤差
M=1;
h=b-a;
err=1;
J=0;
R=zeros(4,4);
R(1,1)=h*(feval(f,a)+feval(f,b))/2;
while ((err>delta)&&(J<n))||(J<4)
J=J+1;
h=h/2;
s=0;
for p=1:M
x=a+h*(2*p-1);
s=s+feval(f,x);
end
R(J+1,1)=R(J,1)/2+h*s;
M=2*M;
for K=1:J
R(J+1,K+1)=R(J+1,K)+(R(J+1,K)-R(J,K))/(4^K-1);
end
err=abs(R(J,J)-R(J+1,K+1));
end
quad11=R(J+1,J+1);
quad11 % 所求積分值
R % R是T數表
2. matlab編程 使用龍貝格積分公式 計算定積分 從0-1上的 ln(x)/x 的積分。
因為函數 ln(1+x)/x在[0,1]上是反常積分。
3. 用matlab龍貝格演算法
主程序
clc;
clear;
format long e;%精確顯示
y=18;
T=zeros(y,y);%定義長度為y的矩陣T
for i=0:y-1
T(i+1)=i;%對矩陣T的第一行賦初值
end
a=0;
b=1;
T(1,2)=(b-a)*(1+f(b))/2;%算出T1
for l=2:y
sum=0;
for j=1:2^(l-1)
sum=sum+f(a+(2*j-1)*(b-a)/2^l);
end
T(l,2)=T(l-1,2)/2+((b-a)/2^l)*sum; %算出梯形序列
if (T(l,2)-T(l-1,2))<0.0000005; %判斷是否符合精度
break;
end
end
h=1;
for m=1:y-2
for k=h:(y+h-m-1)
T(k+1,m+2)=((4^m)*T(k+1,m+1)-T(k,m+1))/(4^m-1);
%按公式算出接下去的序列
if (T(k+1,m+2)-T(k,m+2))<0.0000005;
break;
end
end
h=h+1;
end
4. Matlab/simulink中,什麼叫Oder45和Ode23bt演算法
ode45是基於四點法和五點法的解微分方程數值解的方法,ode23等也一樣,都是基於已知點「預測」下一個點的函數值的方法,不同的演算法「預測」的方法不一樣。比較著名的「預測」方法有歐拉法,改進的歐拉法,龍格庫塔法,多點法等。在matlab一般使用中這些方法的差別不大,可以不予理會,會用一個即可,推薦ODE4。
5. 用matlab 龍貝格求積分
我試了下 把你的程序保存為Romberg.m
在工作區輸入f=@(x) 1/(x+1)
a=0
b=1
eps=10^(-4)
Romberg(f,a,b,eps)
錯誤提示是你程序第13行的變數 s沒有定義 應該是大寫吧
6. 用matlab程序實現:用romberg方法計算積分sinx/x上限為1下限為0的近似值,要求誤差不超過0.5*10……-6
a=0;
b=1;
n=1;
k=1;
e=0.5*10^(-6);
T=zeros(10,10);
h=(b-a)/2;
t=h*(1+sin(1));
T(1,1)=t;
for j=1:9
F=0;
for i=1:n
F=F+sin(a+(2*i-1)*h)/(a+(2*i-1)*h);
end
for i=1:k
if T(1,i+1)==0
T(1,i+1)=T(1,i)/2+h*F;
end
end
for m=1:k
if T(m+1,k-m+1)==0
T(m+1,k-m+1)=(4^m*T(m,k-m+2)-T(m,k-m+1))/(4^m-1);
end
end
if abs(T(m+1,1)-T(m,1))<e
I=T(m+1,1);
break
else
h=h/2;
n=2*n;
k=k+1;
end
end
最後的 I 就是函數值,K就是滿足精度時的M值
7. 將區間[0 1]等分,並將每一個等分區間進行積分的matlab程序
下面是使用龍貝格演算法求積分的matlab程序代碼
clear
clc
format long
f='4/(1+x^2)'; %這是被積函數
x='x'; %這是被積自變數
a=0; %這是積分下限
b=1; %這是積分上限
e=1e-5; %這是積分誤差限制
%以下是龍貝格積分演算法,是目前最為成熟的積分演算法,具有收斂速度快,精度可以自定義的優點
% I為積分的估計值
% n為迭代次數,2^(n-1)是等分區間的份數
T(1,1)=(b-a)/2*(subs(f,x,a)+subs(f,x,b));
T=double(T);
n=2;
h=b-a;
T(2,1)=T(1,1)/2+h/2*double(subs(f,x,a+h/2));
T(2,2)=4/3*T(2,1)-1/3*T(1,1);
d=T(2,2)-T(1,1);
while d>e
n=n+1;
h=h/2;
T(n,1)=T(n-1,1)/2;
for i=1:2^(n-2)
T(n,1)=T(n,1)+h/2*double(subs(f,x,a+(i-1/2)*h));
end
for i=2:n
k=4^(i-1);
T(n,i)=k/(k-1)*T(n,i-1)-1/(k-1)*T(n-1,i-1);
end
d=abs(T(n,n)-T(n-1,n-1));
end
I=T(n,n) %輸出計算值
望採納!謝謝!
8. 已知橢圓的方程是x^2+y^2/4=1,要在matlab用積分的方法求其周長,應該怎麼做啊急啊,謝謝了
曲線長度積分l=∫√[φ'(t)^2+ψ'(t)^2] dt 橢圓參數方程為x=φ(t)=a sint y=ψ(t)=b cost
或l=∫√(1+y『^2)dx 在(0,pi/2) 內 橢圓y=b*(1-x^2/a^2)^0.5
sin²x=(sinx)^2
9. 用matlab,龍貝格演算法計算∫(0到1)[x/(4+x²)]dx的近似值。 求程序代碼!!!
%龍貝格求積演算法function I=romberg(a,b)h=b-a;T(1)=h/2*(fun(a)+fun(b));m=1;while 1 h=h/2; S(1)=1/2*T(1)+h*sumf(2^(m-1),a,h); for j=1:m S(j+1)=S(j)+(S(j)-T(j))/(4^j-1); end if abs(S(m+1)-T(m))<1e-6 break; end T=S;m=m+1;endI=S(m+1);end
function f=sumf(m,a,h)for j=1:m y(j)=fun(a+(2*j-1)*h);endf=sum(y);end
function f=fun(x)f=x/(4+x^2);end結果:
>> I=romberg(0,1)
I =
0.111571775646293
>>