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

2021-09-07 23:10:50 字數 3754 閱讀 1398

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

線性代數為什麼此題不能用高斯消元法而是需要用高斯若爾當

好像沒有必然的聯絡?就是高斯若爾當把矩陣化成單位的矩陣了 大一線性代數題目,用高斯消元法求解下列方程組 a 2 3 6 2 5 3 0 1 4 1 0 1 0 0 0 1 3 2 1 0 3 0 5 2 0 1 4 0 3 1 0 0 0 1 3 2 x1 3x3 5x5 2 x2 4x3 3x5 ...

一元五次方程用消元法怎麼求

二元一次方程的消元法是什麼,求解 解二元一次方程組的消元法一共有兩種 代入消元法 在一個二元一次方程中,用一個未知數表示另一個未知數,將其代入另一個方程,解得一個未知數 加減消元法 將兩個方程的進行變形,使其中一個未知數的係數相等或互為相反數,再將兩個方程對應相減或相加。求得另一個未知數,供參考,請...

線性代數題如圖,用消元法解方程組

標號 首先 減去 得 減 慢慢算吧 大一線性代數題目,用高斯消元法求解下列方程組 a 2 3 6 2 5 3 0 1 4 1 0 1 0 0 0 1 3 2 1 0 3 0 5 2 0 1 4 0 3 1 0 0 0 1 3 2 x1 3x3 5x5 2 x2 4x3 3x5 1 x4 3x5 2 ...