計算機語言運用--數值計算9-方程的計算機處理95(5)_C++v6
計算機:電子線路組成的計算機器。人與計算機則是通過計算機語言-符號系統說給計算機聽而交流。
計算機語言有低級語言-機器語言、彙編、高級語言-C/C++/C#/VB/PASCAL/LISP/JAVA/PYTHON/……成百上千種之多。
作為一種計算機器—可以協助人類處理各種事情—數值計算問題、文字處理問題、圖形圖像處理問題、事務問題……。自從有了數字計算的計算機器,幾乎所有的可以交給計算機的事情,都交給計算機來處理—是輔助處理—按照人們的要求—事先安排的模式進行處理。
數值計算
代數的計算、初等函數的計算、代數方程的求解、解析幾何與微分幾何的求解、矢量-張量與場論的求解、抽象代數-空間及泛函分析、級數與變換、特殊函數問題、概率統計與隨機過程分析計算、誤差分析與實驗數據處理、最優化方法分析、有限單元法求解、數論分析、集合論及其計算、拓撲學分析與計算、組合數學的計算、圖結構處理、數理邏輯分析與處理、……、……
或者說:
自然數的計算、整數的計算、實數的計算、複數的計算、矢量-向量的計算、矩陣的計算、函數的計算、代數方程的計算、函數方程的計算、微分的計算、積分的計算、常微分-一元微分方程的計算、偏微分-多元微分方程的計算、連續數量的計算、離散數量的計算、集合的計算、組合數學的計算、……、……
或者說:科學與工程技術應用中的數值計算、……、……
方程的計算機處理
這裡說的方程,是以實數域為計算範圍。
這裡說的方程:是含有未知數的等式。
可以是a+5=8,或X+A=B,或ax2+bx+c=0,或ax+by=c與dx-ey=f,或ax"+bx=c,或,
或
……、……
計算機如何處理這些問題呢?,問題的描述是什麼樣子的,才能充分利用計算機呢?
當然是代數形式的。便於計算機發揮特長,便於程序軟體的重用性。通過用戶交互,決定將什麼樣的具體問題交給計算機進行數值處理。
方程的計算機處理
MATLAB語言及其平臺、Fotran語言平臺 C語言v6平臺 C語言vs平臺
C++語言V6平臺
對於任何一個計算機語言來說,X+a=b型的方程也需要進行改造:
成為----X=b-a的樣式;
計算機是進行數值計算的好幫手,因此需要對a,b預先賦值,再進行計算;
那麼對於二元一次方程呢?也是如此。當然,最好是用求解方程的兩個解的公式來進行處理—也就是,用它們作為計算機語言描述的基礎。當然,需要計算機語言描述判別分母為零。這樣,便有了方程處理的前期工作,手工處理。
有數學家推導的求根公式可以直接利用
從數學問題的自然語言表述到數學問題的計算機語言表述
三元一次方程組求解
求解的計算機語言表達分析,可以簡單說明如下
算法說明:
接下來是說:C++是編譯型語言,因此需要將所做工作用計算機語言編製程序,再交給計算機來處理。作為靜態數據的模式,與MATLAB不同,需要對計算的數據—數值或代數預先聲明變量,以便申請到內存來放置。
用C++語言編寫為文件形式,接著編譯成*.exe文件,再運行—人機互動。
程序文件
//三元一次方程組--threevariable linear equations
// CubicEquation3_1.cpp : Defines the entry point for the consoleapplication.
//
#include "stdafx.h"
#include <iostream.h>
#include <fstream>
#include <math.h>
using namespace std;
int main(int argc, char* argv[])
{
printf("HelloWorld!\n");
//variable declaration
int i,j,k,N;
float ai[3][4];
float D,D1,D2,D3;
float x,y,z;
char Fout_name[10];
//input
cout<<"輸入1個整數N,指定你的計算次數"<<endl;
cin>>N;
for(i=0;i<N;i++)
{
cout<<"請輸入三元一次方程的係數,a,b,c,d, 共三組"<<endl;
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
{
cin>>ai[j][k];
}
}
//data processing
D=ai[0][0]*ai[1][1]*ai[2][2]+ai[0][1]*ai[1][2]*ai[2][0]+ai[0][2]*ai[1][0]*ai[2][1]\
-ai[0][0]*ai[1][2]*ai[2][1]-ai[0][1]*ai[1][0]*ai[2][2]-ai[0][2]*ai[1][1]*ai[2][0];
D1=ai[0][3]*ai[1][1]*ai[2][2]+ai[0][1]*ai[1][2]*ai[2][3]+ai[0][2]*ai[2][1]*ai[1][3]\
-ai[0][3]*ai[1][2]*ai[2][1]-ai[0][1]*ai[1][3]*ai[2][2]-ai[0][2]*ai[1][1]*ai[2][3];
D2=ai[0][0]*ai[1][3]*ai[2][2]+ai[0][3]*ai[1][2]*ai[2][0]+ai[0][2]*ai[2][3]*ai[1][0]\
-ai[0][2]*ai[1][3]*ai[2][0]-ai[0][3]*ai[1][0]*ai[2][2]-ai[0][0]*ai[2][3]*ai[1][2];
D3=ai[0][0]*ai[1][1]*ai[2][3]+ai[0][1]*ai[1][3]*ai[2][0]+ai[0][3]*ai[2][1]*ai[1][0]\
-ai[0][3]*ai[1][1]*ai[2][0]-ai[0][1]*ai[1][0]*ai[2][3]-ai[0][0]*ai[2][1]*ai[1][3];
if(D!=0.0)
{
x=D1/D;
y=D2/D;
z=D3/D;
//output
cout<<"方程有三個根:x= "<<x<<" ,y= "<<y<<",z= "<<z<<endl;
//save result
cout<<"數據處理完畢,請輸入保存文件名,格式為:*.txt"<<endl;
cin>>Fout_name;
ofstreamfile_out(Fout_name); //,,,
file_out<<"鍵盤輸入的三元一次方程係數為:a1="<<ai[0][0]<<"b1="<<ai[0][1]\
<<"c1="<<ai[0][2]<<" d1="<<ai[0][3]<<endl;
file_out<<endl;
file_out<<"鍵盤輸入的三元一次方程係數為:a2="<<ai[1][0]<<"b2="<<ai[1][1]\
<<"c2="<<ai[1][2]<<" d2="<<ai[1][3]<<endl;
file_out<<endl;
file_out<<"鍵盤輸入的三元一次方程係數為:a3="<<ai[2][0]<<"b3="<<ai[2][1]\
<<"c3="<<ai[2][2]<<" d3="<<ai[2][3]<<endl;
file_out<<endl;
file_out<<"計算機求解方程的結果如下,三個解:"<<endl;
file_out<<"x="<<x<<endl;
file_out<<"y="<<y<<endl;
file_out<<"z="<<z<<endl;
cout<<"計算機處理結果被保存為 "<<Fout_name<<" 請檢查!"<<endl;
}
else
cout<<"該方程組沒有解!"<<endl;
}
return 0;
}
求解過程
Hello World!
輸入1個整數N,指定你的計算次數
3
請輸入三元一次方程的係數,a,b,c,d,共三組
1 2 3 4 5 6 7 8 9 10 11 12
該方程組沒有解!
請輸入三元一次方程的係數,a,b,c,d,共三組
1 3 5 6 8 9 4 3 2 -11 12 13
方程有三個根:x=-0.327103 ,y= 0.0841122, z= 1.21495
數據處理完畢,請輸入保存文件名,格式為:*.txt
1.txt
計算機處理結果被保存為1.txt 請檢查!
請輸入三元一次方程的係數,a,b,c,d,共三組
2 4 6 -8 3 5 -7 9.7 3 -6 9 11
方程有三個根:x=3.54271 ,y= -1.91667, z= -1.23646
數據處理完畢,請輸入保存文件名,格式為:*.txt
2.txt
計算機處理結果被保存為2.txt 請檢查!
Press any key to continue
進行結果
咱不是要說明實際數學問題怎麼變成計算機處理嗎!就是數學方程的預先處理問題、計算機語言描述問題嘛。
在C、C++、C#、Fortran等語言中,你能看到複數的處理問題與描述。
感覺咋樣?什麼是方程的計算機處理—算法及其描述,運行及其人機互動。