試用高斯消元法編制fortran程式計算n元一次方程組

時間 2021-09-07 23:10:17

1樓:匿名使用者

以下是約當消去法解方程組,供參考。

c 約當削去法解線性方程

c program jordan

real a(5,6)

data a/1,0,6,0,0,

1 0,1,0,0,0,

1 0,0,1,0,0,

1 0,0,0,1,0,

1 0,0,0,0,1,

1 1,1,7,1,1/

write(*,100)((a(i,j),j=1,6),i=1,5)write(*,*)

call jordan(a,5,6)

write(*,100)(a(i,6),i=1,5)100 format(1x,6f10.4)c  read(*,*)

c選列主元的約當削去法子程式

subroutine jordan(a,n,m)real a(n,m)

do 10 k=1,n

big=abs(a(k,k))

l=kdo 5 j=k+1,n

if (abs(a(j,k)).gt.big) l=j5 continue

if (l.ne.k) then

do 15 j=k,n+1

r=a(k,j)

a(k,j)=a(l,j)

a(l,j)=r

15 continue

endif

do 20 j=n+1,k,-1

20 a(k,j)=a(k,j)/a(k,k)do 40 i=1,n

if (i.ne.k) then

do 30 j=n+1,k,-1

30 a(i,j)=a(i,j)-a(i,k)*a(k,j)endif

40 continue

write(*,100)((a(ii,jj),jj=1,6),ii=1,5)

write(*,*)

10 continue

100 format(1x,6f10.4)return

c不選主元的約當削去法子程式

subroutine jor10(a,n,m)dimension a(n,m)

do 10 k=1,n

do 20 j=n+1,k,-1

20 a(k,j)=a(k,j)/a(k,k)do 40 i=1,n

if (i.ne.k) then

do 30 j=n+1,k,-1

30 a(i,j)=a(i,j)-a(i,k)*a(k,j)endif

40 continue

10 continue

returnend

2樓:匿名使用者

program gauss

implicit real(kind=8)(a-z)integer,parameter:: n=3integer::i,j

real(kind=8) ::a(n,n),b(n),x(n)open(unit=11,file='fin.txt')open(unit=12,file='fout.

txt')read(11,*)

!讀入a矩陣

read(11,*)((a(i,j),j=1,n),i=1,n)!讀入b向量

read(11,*) (b(j),j=1,n)call solve(a,b,x,n)

write(12,999)x

999 format(t5,'高斯消去法計算結果',/,t4,'x=',4(/f12.8))

end program gauss

!子程式---------------

subroutine solve(a,b,x,n)implicit real*8(a-z)

integer::i,k,n

real(kind=8) ::a(n,n),b(n),x(n)real(kind=8) ::aup(n,n),bup(n)!ab為增廣矩陣 [ab]

real(kind=8) ::ab(n,n+1)ab(1:n,1:n)=a

ab(:,n+1)=b

! 這段是 高斯消去法的核心部分

do k=1,n-1

do i=k+1,n

temp=ab(i,k)/ab(k,k)

ab(i,:)=ab(i,:)-temp*ab(k,:)end do

end do

aup(:,:)=ab(1:n,1:n)

bup(:)=ab(:,n+1)

!呼叫用上三角方程組的迴帶方法

call uptri(aup,bup,x,n)end subroutine solve

subroutine uptri(a,b,x,n)implicit real*8(a-z)

integer::i,j,n

real(kind=8) ::a(n,n),b(n),x(n)x(n)=b(n)/a(n,n)

!迴帶部分

do i=n-1,1,-1

x(i)=b(i)

do j=i+1,n

x(i)=x(i)-a(i,j)*x(j)end do

x(i)=x(i)/a(i,i)

end do

end subroutine uptri

輸入資料放在fin.txt 記得開頭加!a.b輸出資料自動存放在fout.txt

3樓:酒神

daetrfyeryerqyryeryeryeqryeqqyeryeyreyreegbfhsdfa

二維波動方程的有限差分程式(詳細的matlab或者fortran程式) 15

4樓:鬥破了啊

^dx=8000;

dy=4000;

ix=400;

iy=80;

nx=dx/ix+1;

ny=dy/iy+1;

vel=1500*ones(ny,nx);

vel((fix(ny/3)):(fix(2*ny/3)))=1500;

vel((fix(2*ny/3)):ny)=1700;

fre=80;

it=0.01;

u_0=zeros(ny,nx);

u_1=zeros(ny,nx);

for i=1:nx;

for j=1:ny;

u_1(1,i)=-(it)^2*sin(2*pi*fre*it)*exp(-2*pi*fre*(it));

endend

u_1(1,1) = u_1(1,2);

u_1(1,nx) = u_1(1,(nx-1));

for k=2:n-1

for j=1:ny

for i=2:nx-1

if j=1

u_2(j,i) = ((it*vel(j,i))^2)/(ix^2)*(u_1(j,(i-1))+u_1(j,(i+1))-2*u_1(j,i)) + ((it*vel(j,i))^2)/(iy^2)*(u_1((j-1),i)+u_1((j+1),i)-2*u_1(j,i)) + 2*u_1(j,i) - u_0(j,i);

endu_2(1,i)= ((it*vel(1,i))^2)/(ix^2)*(u_1(1,(i+1))+u_1(1,(i-1))-2*u_1(j,j)+ ((it*vel(1,i))^2)/(iy^2)*2*(u_1(2,i)-u_1(1,i))+ 2*u_1(1,i)-u_0(1,i)- (it)^2*sin(2*pi*fre*k*it)*exp(-2*pi*fre*(it*k));

endelseif j=ny

u_2(i,j-1)=u_1(i,j)end

二元一次方程,二元一次方程是什麼

1.2008x 2007y 2006 2006x 2005y 2004 2x 2y 2,x y 1 2008x 2007y 2007 x y x 2006,將x y 1代入 2007 x 2006 x 1 則y 2 2.a 2 x a 1 y a,a 1 x y x a b 2 x b 1 y b,...

數學二元一次方程配方,數學二元一次方程式如何配方如何配?

廉潔的清風 配方法 用配方法解方程ax 2 bx c 0 a 0 先將固定數c移到方程右邊 ax 2 bx c 將二次項係數化為1 x 2 b a x c a 方程兩邊分別加上一次項係數的一半的平方 x 2 b a x 0.5 b a 2 c a 0.5 b a 2 方程左邊成為一個完全平方式 x ...

一元一次方程 10,一元一次方程

2x 29 9 9 3x 5 合併 2x 20 27x 45 移項,兩邊同減去 2x 20 25x 45移項,兩邊同減去 45 25x 25移項的實質就是在等號兩邊同加或同減一個數,使得未知項全部位於等號的一側 而已知常數項全部位於等號的另一側。2x 29 9 9 3x 5 去括號,合併同類項 2x...