日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fredholm第二类积分方程的MATLAB代码实现(1)

發布時間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fredholm第二类积分方程的MATLAB代码实现(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是《The Numerical Solution of Integral Equations of the Second Kind》書上的例題代碼實現,基于MATLAB來編寫的,對應于這一篇的Python代碼點擊打開鏈接

本代碼主要實現Fredholm integral equations of the second kind,方程如下:?
? ? ? ? ?lamda*x(t)-integrate(K(t,s)*x(s))ds=y(t),a=0<=t<=b,K(t,s)取exp(s*t)?
首先,我們給定兩個精確解exp(-t)cos(t)和sqrt(t),求出其對應的y(t),然后再來反解x(t).更詳細說明可?

參見《The Numerical Solution of Integral Equations of the Second Kind》P30-34.

首先定義各種函數,保存為.m文件

第一步:定義核函數

function k=func_k(s,t) k=exp(s*t); %k的表達式

第二步:定義給定的精確解x

function x=func_x(t) x=exp(-t)*cos(t); %x的表達式

第三步:用精確解求出y

function y=func_y(x,k,a,b,lamda) syms t s; y=subs(lamda*x-int(x*k,t,a,b),t,s); % 用符號積分求出y的表達式,并統一y中的變量為s

第四步:求方程組的右端項(相當于Ax=b中的b)

function f=func_f(y,a,b,lamda,n) syms s; f=ones(n,1); for i=1:nf(i)=int(y*s^(i-1),s,a,b); %這里用符號積分求y*s^(i-1) end

第五步:求系數c

function c=solve_c(f,a,b,lamda,n) % B=ones(n,n); %用于存放系數矩陣 for i=1:nfor j=1:nB(i,j)=-b^(i+j-1)/(factorial(j-1)*(i+j-1));endB(i,i)=lamda+B(i,i); end c=B\f; %求c,其為一個n維的向量 end

第六步:求xn

function xn=solve_xn(y,c,a,b,lamda,n) syms t; m=0; for i=0:n-1m=m+c(i+1)*t^i/factorial(i); end xn=(y+m)/lamda;

第七步:求無窮范數

function E=err(x,xn,a,b) syms s t; tt=a:0.1:b; E=vpa(norm(subs(subs(x-xn,s,t),t,tt),Inf),20); %取區間[a,b]中的離散點,求無窮范數

以上是定義好的函數,接下來再寫一個主函數文件,然后運行此文件即可。以上的核函數,x函數等可以改成自己想要的!!!

clear n=input('please input n:') a=input('please input a:') b=input('please input b:') lamda=input('please input lamda:') e=ones(n,1); %用來存誤差 syms s t; for i=1:nk=func_k(s,t);x=func_x(t);y=func_y(x,k,a,b,lamda);f=func_f(y,a,b,lamda,i);c=solve_c(f,a,b,lamda,i);xn=solve_xn(y,c,a,b,lamda,i);e(i)=err(x,xn,a,b); end e if n==10figure(1)tt=a:0.1:b;plot(tt,vpa(subs(subs(x-xn,s,t),t,tt),20),'r--')xlabel('t'), ylabel('error')title('error,n=10,a=0,b=1,lamda=5') end

運行結果我就不放上來了,因為這臺電腦沒有按MATLAB,o(╥﹏╥)o



總結

以上是生活随笔為你收集整理的Fredholm第二类积分方程的MATLAB代码实现(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。