用直接消去法解方程组的程序如何编写(Fortran程序)

用直接消去法解方程组的程序如何编写(Fortran程序),第1张

!高斯消去法

subroutine agaus(a,b,n,x,l,js)

dimension a(n,n),x(n),b(n),js(n)

double precision a,b,x,t

l=1 !逻辑变量

do k=1,n-1

d=00

do i=k,n

do j=k,n

if (abs(a(i,j))>d) then

d=abs(a(i,j))

js(k)=j

is=i

end if

end do

end do !把行绝对值最大的元素换到主元位置

if (d+10==10) then

l=0

else !最大元素为0无解

if(js(k)/=k) then

do i=1,n

t=a(i,k)

a(i,k)=a(i,js(k))

a(i,js(k))=t

end do !最大元素不在K行,K行

end if

if(is/=k) then

do j=k,n

t=a(k,j)

a(k,j)=a(is,j)

a(is,j)=t !交换到K列

end do

t=b(k)

b(k)=b(is)

b(is)=t

end if !最大元素在主对角线上

end if !消去

if (l==0) then

write(,100)

return

end if

do j=k+1,n

a(k,j)=a(k,j)/a(k,k)

end do

b(k)=b(k)/a(k,k) !求三角矩阵

do i=k+1,n

do j=k+1,n

a(i,j)=a(i,j)-a(i,k)a(k,j)

end do

b(i)=b(i)-a(i,k)b(k)

end do

end do

if (abs(a(n,n))+10==10) then

l=0

write(,100)

return

end if

x(n)=b(n)/a(n,n)

do i=n-1,1,-1

t=00

do j=i+1,n

t=t+a(i,j)x(j)

end do

x(i)=b(i)-t

end do

100 format(1x,'fail')

js(n)=n

do k=n,1,-1

if (js(k)/=k) then

t=x(k)

x(k)=x(js(k))

x(js(k))=t

end if

end do

return

end

program main

dimension a(4,4),b(4),x(4),js(4)

double precision a,b,x

real m1,m2,j

open(1,file="laiyitxt")

read(1,)m1,m2,j

close(1)

n=4

print,m1,m2,j

a(1,1)=m1cos(314159j/180)

a(1,2)=-m1

a(1,3)=-sin(314159j/180)

a(1,4)=0

a(2,1)=m1sin(314159j/180)

a(2,2)=0

a(2,3)=cos(314159j/180)

a(2,4)=0

a(3,1)=0

a(3,2)=m2

a(3,3)=-sin(314159j/180)

a(3,4)=0

a(4,1)=0

a(4,2)=0

a(4,3)=-cos(314159j/180)

a(4,4)=1

b(1)=0

b(2)=m198

b(3)=0

b(4)=m298

call agaus(a,b,n,x,l,js)

if (l/=0) then

write(,)"a1=",x(1),"a2=",x(2) ,"n1=",x(3),"n2=",x(4)

end if

end

!逆矩阵求解

SUBROUTINE qiuni(A,N,L,IS,JS)

DIMENSION A(N,N),IS(N),JS(N)

DOUBLE PRECISION A,T,D

L=1

DO K=1,N

D=00

DO I=K,N

DO J=K,N

IF(ABS(A(I,J))GTD) THEN !把最大的元素给D

D=ABS(A(I,J))

IS(K)=I

JS(K)=J

END IF

END DO

END DO

IF (D+10EQ10)THEN

L=0

WRITE(,200)

RETURN

END IF

200 FORMAT(1X,'ERRNOT INV')

DO J=1,N

T=A(K,J)

A(K,J)=A(IS(K),J)

A(IS(K),J)=T

END DO

DO I=1,N

T=A(I,K)

A(I,K)=A(I,JS(K))

A(I,JS(K))=T

END DO

A(K,K)=1/A(K,K)

DO J=1,N

IF(JNEK)THEN

A(K,J)=A(K,J)A(K,K)

END IF

END DO

DO I=1,N

IF(INEK)THEN

DO J=1,N

IF(JNEK)THEN

A(I,J)=A(I,J)-A(I,K)A(K,J)

END IF

END DO

END IF

END DO

DO I=1,N

IF(INEK)THEN

A(I,K)=-A(I,K)A(K,K)

END IF

END DO

END DO

DO K=N,1,-1

DO J=1,N

T=A(K,J)

A(K,J)=A(JS(K),J)

A(JS(K),J)=T

END DO

DO I=1,N

T=A(I,K)

A(I,K)=A(I,IS(K))

A(I,IS(K))=T

END DO

END DO

RETURN

END

SUBROUTINE BRMUL(A,B,N,C)

DIMENSION A(N,N),B(N),C(N)

DOUBLE PRECISION A,B,C

DO I=1,N

DO J=1,N

C(I)=00

DO L=1,N

C(I)=C(I)+A(I,L)B(L)

END DO

END DO

END DO

RETURN

END

program main

DIMENSION A(4,4),B(4,1),C(4,1),IS(4),JS(4)

DOUBLE PRECISION A,B,C

REAL M1,M2,JD

OPEN(1,FILE='LAIYITXT')

READ(1,) M1,M2,JD

PRINT,M1,M2,JD

CLOSE(1)

A(1,1)=M1COS(314JD/180)

A(1,2)=-M1

A(1,3)=-SIN(314JD/180)

A(1,4)=0

A(2,1)=M1SIN(314JD/180)

A(2,2)=0

A(2,3)=COS(314JD/180)

A(2,4)=0

A(3,1)=0

A(3,2)=M2

A(3,3)=-SIN(314JD/180)

A(3,4)=0

A(4,1)=0

A(4,2)=0

A(4,3)=-COS(314JD/180)

A(4,4)=1

B(1,1)=0

B(2,1)=M198

B(3,1)=0

B(4,1)=M298

CALL QIUNI(A,4,L,IS,JS)

CALL BRMUL(A,B,4,C)

WRITE(,) (C(I,1),I=1,4)

END

画图

USE MSFLIB

INTEGER status

TYPE(xycoord) xy

status=SETCOLORRGB(#FFFFFF)

status1=SETCOLORRGB(#0000FF)

OPEN(1,FILE="GTXT")

READ(1,) G1,G2,G3,G4

OPEN(2,FILE="NTXT")

READ(2,) N1,N2,N3,N4

CALL MOVETO(INT(20),INT(20),xy)

status=LINETO(INT(40),INT(G1))

status=LINETO(INT(80),INT(G2))

status=LINETO(INT(120),INT(G3))

status=LINETO(INT(160),INT(G4))

CALL SETLINESTYLE(#FF00)

CALL MOVETO(INT(20),INT(20),xy)

status1=LINETO(INT(40),INT(N1))

status1=LINETO(INT(80),INT(N2))

status1=LINETO(INT(120),INT(N3))

status1=LINETO(INT(160),INT(N4))

READ(,)

END

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

解题步骤:

2×(x-16)=6

2x-32=6

2x=6+32

2x=38

x=19

提高:

一、培养认真审题的习惯

认真审题是正确解题、准确计算的前提。小学生因审题不严而导致错误的现象较重,原因是一方面学生识字量少,理解水平低;另一方面是做题急于求成,不愿审题。因此,教师在教学中,要引导学生认识审题的重要性,增强审题意识。同时,还要教给学生审题方法,建立解题的基本程序如审题—列式—计算—验 算—作答等,把审题摆在解题过程的第一位。

二、培养认真验算的习惯

在解题过程中,要培养认真验算的习惯,这是保证解题正确性的关键。教师在教学中要把验算作为解题过程的基本环节之一。加强训练,严格要求和督促学生去做,要向学生讲清什么叫验算以及验算的方法、意义等。

三、培养认真估算的习惯

估算是保障计算准确的快捷手段,但现在不少教师认为估算很少作为考试内容而不予重视,这是十分错误的。教师要抓住各种时机,有意识的让学生掌握 估算方法,引导学生发现一些和、差、积、商的规律。如2040÷40,估算时将2040看作2000,把2040÷40看作2000÷40来估算,可用来 检验计算的最高位是否正确,让学生明白估算的重要性。

sol=[];

syms c

for i=1:21

b=(i-1)05;

eq1=3b-c;

sol(i)=solve(eq1,'c');

end

sol

sol =

Columns 1 through 3

0 15000 30000

Columns 4 through 6

45000 60000 75000

Columns 7 through 9

90000 105000 120000

Columns 10 through 12

135000 150000 165000

Columns 13 through 15

180000 195000 210000

Columns 16 through 18

225000 240000 255000

Columns 19 through 21

270000 285000 300000

/实现二分法求解方程。编写并使用以下函数:double

SolveRoot(double(pf)(double

x),double

a,double

b,int

n)这里,pf指向一个函数f,f用来定义要求解的方程f(x)=0,a和b是未知解x的上下界(即a<=x<=b),n是循环次数。例如,如果f(x)=xx-2,则SolveRoot

(f,1,2,100)将返回1414213562373095,即方程为xx=2的解。二分法的原理是反复地把区间分为两个相等区间,然后用其中含有解的一半代替该区间,依次类推,得到满足精度的解。它通过检查f(a)和f(b)的符号来判断解是否在区间中。/#include

<cmath>#include

<iomanip>#include

<iostream>using

namespace

std;double

SolveRoot(double

(pf)(double

t),

double

a,

double

b,

int

n){//请补充完整

double

mid=(a+b)/2;

double

fm=pf(mid);

if(n==0)

return

mid;

double

fa=pf(a);

if(fmfa>0)

a=mid;

else

b=mid;

return

SolveRoot(pf,a,b,n-1);}double

f(double

x){

return

xx

-

2;}int

main(){

cout<<setprecision(20);

for(int

n=10;

n<60;

n+=5)

cout<<"SolveRoot(f,1,2,"<<n<<")

=

"<<SolveRoot(f,1,2,n)<<endl;

cout<<"The

exact

SolveRoot

=

"<<sqrt(2)<<endl;

return

0;}

给你一点提示。

牛顿迭代法要计算

(1)

y1=f(x)

x

的函数值

(2)

d1=f(x)

的一阶导数

x

的值

你可以写两个函数,分别计算y1,d1

如果一阶导数有解析解,则可用赋值语句,否则要写数值解子程序。

步骤:

设解的精度,例

float

eps=0000001;

设x初值,x1;

算y1=f(x1);

迭代循环开始

算一阶导数

x1

的值

d1

用牛顿公式

算出

x2;

[x2

=

x1

-

y1

/

d1]

如果

fabs(x2-x1)

>

eps

则从新迭代

--

用新的函数值和一阶导数值推下一个

新x

以上就是关于用直接消去法解方程组的程序如何编写(Fortran程序)全部的内容,包括:用直接消去法解方程组的程序如何编写(Fortran程序)、2×(x-16)=6解方程过程、如何用matlab循环解方程,比如解方程3b-c=0,b是变量,取值从0到10,变化量为0.5,求方程的解c的每个值。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9772050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存