计算方法 c++代码

环境 :Windows 10 + Dev-C++ 5.11

Lagrange 插值方法

Lagrange 插值多项式: 在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)
signed main(){cout<<"拉格朗日插值法,请输入插值点个数n:";int n;cin>>n;printf("请输入%d个插值点x值(等距):",n);double fx[n],x[n];fer(i,0,n){cin>>x[i];}//{24 26 28 30}{1.888175 1.918645 1.947294 1.961009};printf("请输入%d个插值点f(x)值:",n);fer(i,0,n){cin>>fx[i];}int m;printf("请输入待求点个数m:");cin>>m; double targetx[m];//{25 27 29};printf("请输入%d个待求点x值:",m);fer(i,0,m){cin>>targetx[i];}double phi[n];//系数for(int i=0;i<m;i+=1){fer(j,0,n)phi[j]=1;//初始化fer(j,0,n){fer(k,0,n){if(j!=k){phi[j]*=(targetx[i]-x[k]);phi[j]/=(x[j]-x[k]);}}}double res=0;  fer(j,0,n){res+=phi[j]*fx[j];//cout<<i<<" "<<phi[i]<<" "<<data[i]<<" "<<res<<endl;}cout<<"x="<<targetx[i]<<" , L(x)="<<res<<endl;}return 0;
}

牛顿插值方法

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)
signed main(){cout<<"牛顿插值法,请输入插值点个数n:";int n;cin>>n;double data[n];//={0.41075 0.57815 0.69675 0.88811 1.02652};double a[n];//={0.4 0.55 0.65 0.8 0.9};printf("请输入%d个插值点x值:",n);fer(i,0,n){cin>>a[i];}printf("请输入%d个插值点f(x)值:",n);fer(i,0,n){cin>>data[i];}double dp[n][n+1];fer(i,0,n){dp[i][0]=a[i];dp[i][1]=data[i];}fer(j,2,n+1){fer(i,j-1,n){dp[i][j]=(dp[i][j-1]-dp[i-1][j-1])/(dp[i][0]-dp[i-j+1][0]);}}cout<<"差商结果如下:"<<endl;cout<<"x        f(x)     ";fer(i,0,n-1)cout<<i+1<<"阶差商  ";cout<<endl;fer(i,0,n){fer(j,0,i+2){cout<<left<<setw(9)<<dp[i][j]<<" ";}cout<<endl;}cout<<"请输入待求点个数m:";int m;cin>>m;double targetx[m];printf("请输入%d个待求点x值:",m);//0.895fer(i,0,m){cin>>targetx[i];}for(int x=0;x<m;x++){double res=0;double now;fer(i,0,n){now=dp[i][i+1];fer(j,0,i){now*=(targetx[x]-a[j]);}res+=now;}cout<<"x="<<targetx[x]<<" , p(x)="<<res<<endl;}return 0;
}

Newton-Cotes 方法

计算以下积分值:
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)
#define E  2.7182818284590452354
double trapezoid(double down,double up,double fx[]){//积分下限、上限、插值点 //梯形求积公式double res=(up-down)/2;res*=(fx[0]+fx[1]);return res;
}
double simpson(double down,double up,double fx[]){double res=(up-down)/6;res*=(fx[0]+4*fx[1]+fx[2]);return res;
}
double cotes(double down,double up,double fx[]){double res=(up-down)/90;res*=(7*fx[0]+32*fx[1]+12*fx[2]+32*fx[3]+7*fx[4]);return res;
}
double fx1(double x){double res=4-sin(x)*sin(x);res=sqrt(res);return res;
}
double fx2(double x){if(x==0)return 1;double res=sin(x)/x;return res;
}
double fx3(double x){double res=pow(E,x);res/=(4+x*x);return res;
}
double fx4(double x){double res=log(1+x);res/=(1+x*x);return res;
}
signed main(){cout<<"牛顿-柯特斯公式"<<endl;cout<<"积分1:f(x)=sqrt(4-sin(x)^2)"<<endl;cout<<"请输入积分下限和上限(小数输入):";double a,b;cin>>a>>b;cout<<"当求积节点个数=2时,使用梯形求积公式,积分结果为:";double trapex[2],trapefx[2];trapex[0]=a;trapex[1]=b;fer(i,0,2){trapefx[i]=fx1(trapex[i]);}double res=trapezoid(a,b,trapefx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=3时,使用辛普森求积公式,积分结果为:";double simpsonx[3],simpsonfx[3];simpsonx[0]=a;simpsonx[1]=(a+b)/2;simpsonx[3]=b;fer(i,0,3){simpsonfx[i]=fx1(simpsonx[i]);}res=simpson(a,b,simpsonfx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=5时,使用柯特斯求积公式,积分结果为:";double cotesx[5],cotesfx[5];cotesx[0]=a;cotesx[1]=(a+b)/4;cotesx[2]=(a+b)/2;cotesx[3]=(a+b)/4*3;cotesx[4]=b;fer(i,0,5){cotesfx[i]=fx1(cotesx[i]);}res=cotes(a,b,cotesfx);cout<<setprecision(16)<<res<<endl<<endl;cout<<"积分2:f(x)=sinx/x"<<endl;cout<<"请输入积分下限和上限(小数输入):";cin>>a>>b;cout<<"当求积节点个数=2时,使用梯形求积公式,积分结果为:";trapex[0]=a;trapex[1]=b;fer(i,0,2){trapefx[i]=fx2(trapex[i]);}res=trapezoid(a,b,trapefx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=3时,使用辛普森求积公式,积分结果为:";simpsonx[0]=a;simpsonx[1]=(a+b)/2;simpsonx[3]=b;fer(i,0,3){simpsonfx[i]=fx2(simpsonx[i]);}res=simpson(a,b,simpsonfx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=5时,使用柯特斯求积公式,积分结果为:";cotesx[0]=a;cotesx[1]=(a+b)/4;cotesx[2]=(a+b)/2;cotesx[3]=(a+b)/4*3;cotesx[4]=b;sfer(i,0,5){cotesfx[i]=fx2(cotesx[i]);}res=cotes(a,b,cotesfx);cout<<setprecision(16)<<res<<endl<<endl;cout<<"积分3:f(x)=e^x/(4+x^2)"<<endl;cout<<"请输入积分下限和上限(小数输入):";cin>>a>>b;cout<<"当求积节点个数=2时,使用梯形求积公式,积分结果为:";trapex[0]=a;trapex[1]=b;fer(i,0,2){trapefx[i]=fx3(trapex[i]);}res=trapezoid(a,b,trapefx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=3时,使用辛普森求积公式,积分结果为:";simpsonx[0]=a;simpsonx[1]=(a+b)/2;simpsonx[3]=b;fer(i,0,3){simpsonfx[i]=fx3(simpsonx[i]);}res=simpson(a,b,simpsonfx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=5时,使用柯特斯求积公式,积分结果为:";cotesx[0]=a;cotesx[1]=(a+b)/4;cotesx[2]=(a+b)/2;cotesx[3]=(a+b)/4*3;cotesx[4]=b;fer(i,0,5){cotesfx[i]=fx3(cotesx[i]);}res=cotes(a,b,cotesfx);cout<<setprecision(16)<<res<<endl<<endl;cout<<"积分4:f(x)=ln(1+x)/(1+x^2)"<<endl;cout<<"请输入积分下限和上限(小数输入):";cin>>a>>b;cout<<"当求积节点个数=2时,使用梯形求积公式,积分结果为:";trapex[0]=a;trapex[1]=b;fer(i,0,2){trapefx[i]=fx4(trapex[i]);}res=trapezoid(a,b,trapefx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=3时,使用辛普森求积公式,积分结果为:";simpsonx[0]=a;simpsonx[1]=(a+b)/2;simpsonx[3]=b;fer(i,0,3){simpsonfx[i]=fx4(simpsonx[i]);}res=simpson(a,b,simpsonfx);cout<<setprecision(16)<<res<<endl;cout<<"当求积节点个数=5时,使用柯特斯求积公式,积分结果为:";cotesx[0]=a;cotesx[1]=(a+b)/4;cotesx[2]=(a+b)/2;cotesx[3]=(a+b)/4*3;cotesx[4]=b;fer(i,0,5){cotesfx[i]=fx4(cotesx[i]);}res=cotes(a,b,cotesfx);cout<<setprecision(16)<<res<<endl<<endl;return 0;
}

求非线性方程根的牛顿法

用牛顿迭代法求 xe^x − 1 = 0 的根,迭代初始值为 x0 = 0.5。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)
signed main(){cout<<"牛顿迭代法,所求方程为:xe^x-1=0"<<endl;cout<<"请输入初值:";double x;cin>>x;cout<<"请输入最大迭代次数:";int n;cin>>n;cout<<"请输入精度要求:";double epsilon;cin>>epsilon;bool flag=0;for(int i=0;i<n;i++){double f=x*exp(x)-1;double df=exp(x)+x*exp(x);double x1=x-f/df;cout<<"第"<<i+1<<"次迭代,x="<<x1<<endl;if(abs(x1-x)<epsilon){cout<<"精度已达要求"<<endl;flag=1;break;}x=x1;}if(flag==0)cout<<"迭代次数已达上限"<<endl;return 0;
}

高斯-赛德尔迭代法解线性方程组

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)signed main(){cout<<"Gauss-Seidel迭代法解线性方程组"<<endl;cout<<"请输入矩阵维数n:";int n;cin>>n;double a[n][n],b[n];cout<<"请输入增广矩阵("<<n<<"x"<<n+1<<"):";fer(i,0,n){fer(j,0,n){cin>>a[i][j];}cin>>b[i];}cout<<"请输入迭代初值向量:";double x[n];fer(i,0,n)cin>>x[i];cout<<"请输入精度要求:";double epsilon;cin>>epsilon;cout<<"请输入最大迭代次数:";int m;cin>>m;double phi[n][n];fer(i,0,n){fer(j,0,n){if(j==i)phi[i][j]=0;else{phi[i][j]=-a[i][j]/a[i][i];}}}// 10 -1 -2 7.2  -1 10 -2 8.3  -1 -1 5 4.2bool flag=0;double x1[n];fer(k,0,m){fer(i,0,n){x1[i]=b[i]/a[i][i];fer(j,0,n){x1[i]+=phi[i][j]*x[j];}if(abs(x1[i]-x[i])<epsilon){flag=1;break;}x[i]=x1[i];}cout<<"第"<<k+1<<"次迭代,x=[";fer(i,0,n){cout<<setprecision(10)<<x[i];
if(i!=n-1)cout<<"  ";}cout<<"]"<<endl;if(flag){cout<<"精度已达要求"<<endl;break;}}if(flag==0)cout<<"迭代次数已达上限"<<endl;return 0;
}

高斯消元法求解线性方程组

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)
#define E  2.7182818284590452354
signed main(){cout<<"高斯消元法"<<endl;cout<<"请输入矩阵维数n:";int n;cin>>n;double a[n][n],b[n];cout<<"请输入增广矩阵("<<n<<"x"<<n+1<<"):";fer(i,0,n){fer(j,0,n){cin>>a[i][j];}cin>>b[i];}   // 10 -1 -2 7.2  -1 10 -2 8.3  -1 -1 5 4.2double phi;fer(k,0,n-1){//用于消元的行 fer(i,k+1,n){//被消元的行 phi=-a[i][k]/a[k][k];//消元系数 fer(j,k,n){a[i][j]+=phi*a[k][j];}b[i]+=phi*b[k];}}double x[n];for(int i=n-1;i>=0;i--){ x[i]=b[i];fer(j,i+1,n){x[i]-=a[i][j]*x[j];}x[i]/=a[i][i];}cout<<"x=[";fer(i,0,n){cout<<x[i]; if(i!=n-1)cout<<" ";}cout<<"]"<<endl;return 0;
}

Doolittle 分解法求解线性方程组

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)signed main(){cout<<"Doolittle分解法解线性方程组"<<endl;cout<<"请输入矩阵维数n:";int n;cin>>n;double a[n][n],b[n];cout<<"请输入增广矩阵("<<n<<"x"<<n+1<<"):";fer(i,0,n){fer(j,0,n){cin>>a[i][j];}cin>>b[i];}double l[n][n],u[n][n];fer(i,0,n){fer(j,0,i)u[i][j]=0;fer(j,i,n){u[i][j]=a[i][j];fer(k,0,i){u[i][j]-=l[i][k]*u[k][j];}}fer(j,0,i)l[j][i]=0;l[i][i]=1;fer(j,i+1,n){//计算L,j是行标 l[j][i]=a[j][i];fer(k,0,i){l[j][i]-=l[j][k]*u[k][i];}l[j][i]/=u[i][i];}}cout<<"L="<<endl;fer(i,0,n){fer(j,0,n)cout<<setw(10)<<l[i][j]<<" ";cout<<endl;}cout<<"U="<<endl;fer(i,0,n){fer(j,0,n)cout<<setw(10)<<u[i][j]<<" ";cout<<endl;}double y[n];fer(i,0,n){//Ly=b,求y y[i]=b[i];fer(j,0,i)y[i]-=l[i][j]*y[j];}double x[n];for(int i=n-1;i>=0;i--){x[i]=y[i];fer(j,i+1,n){x[i]-=u[i][j]*x[j];}x[i]/=u[i][i];}cout<<"x=[";fer(i,0,n){cout<<setprecision(10)<<x[i];if(i!=n-1)cout<<"  ";}cout<<"]"<<endl;// 10 -1 -2 7.2  -1 10 -2 8.3  -1 -1 5 4.2return 0;
}

欧拉法求解常微分方程

使用常微分方程例子如下:
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fer(i,a,b) for(int i=a;i<b;i++)
double f(double x,double y){return 3*x-2*y*y-12;
}
signed main(){cout<<"求解常微分方程,方程:y'=3x-2y^2-12"<<endl; double x,y,h;cout<<"请输入初值x,f(x):";cin>>x>>y;cout<<"请输入步长h:";cin>>h;cout<<"请输入x上限:";double n;cin>>n;int k=n/h; cout<<"欧拉法:"<<endl;double x1=x,y1=y;cout<<"f("<<x1<<")="<<y1<<endl;fer(i,0,k){double fxy=f(x1,y1);x1+=h;y1=y1+h*fxy;cout<<"f("<<x1<<")="<<y1<<endl;}cout<<endl<<"改进的欧拉法:"<<endl; x1=x;y1=y;cout<<"f("<<x1<<")="<<y1<<endl;fer(i,0,k){double forcasty=y1+h*f(x1,y1);y1=y1+h/2.0*(f(x1,y1)+f(x1+h,forcasty));x1+=h;cout<<"f("<<x1<<")="<<y1<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/205951.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux加强篇005-用户身份与文件权限

目录 前言 1. 用户身份与能力 2. 文件权限与归属 3. 文件的特殊权限 4. 文件的隐藏属性 5. 文件访问控制列表 6. su命令与sudo服务 前言 悟已往之不谏&#xff0c;知来者之可追。实迷途其未远&#xff0c;觉今是而昨非。舟遥遥以轻飏&#xff0c;风飘飘而吹衣。问征夫以…

【Web】NewStarCTF Week3 个人复现

目录 ①Include &#x1f350; ②medium_sql ③POP Gadget ④R!!!C!!!E!!! ⑤GenShin ⑥OtenkiGirl ①Include &#x1f350; ?filephpinfo 提示查下register_argc_argv 发现为on LFI包含 pearcmd命令执行学习 pearcmd.php文件包含妙用 ?file/usr/local/lib/php/p…

AI模特换装的前端实现

本文作者为 360 奇舞团前端开发工程师 随着AI的火热发展&#xff0c;涌现了一些AI模特换装的前端工具&#xff08;比如weshop网站&#xff09;&#xff0c;他们是怎么实现的呢&#xff1f;使用了什么技术呢&#xff1f;下文我们就来探索一下其实现原理。 总体的实现流程如下&am…

基于Java SSM框架+Vue实现汉服文化平台网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现汉服文化平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将…

MTK联发科MT6762/MT6763/MT6765安卓核心板参数规格比较

MT6762安卓核心板 MTK6762安卓核心板是一款工业级高性能、可运行 android9.0 操作系统的 4G智能模块。 CPU&#xff1a;4xCortex-A53 up to 2.0Ghz/4xCortex-A53 up to 1.5GhzGraphics&#xff1a;IMG GE8320 Up to 650MhzProcess&#xff1a;12nmMemory&#xff1a;1xLP3 9…

【虚拟机】Docker基础 【二】

2.2.数据卷 容器是隔离环境&#xff0c;容器内程序的文件、配置、运行时产生的容器都在容器内部&#xff0c;我们要读写容器内的文件非常不方便。大家思考几个问题&#xff1a; 如果要升级MySQL版本&#xff0c;需要销毁旧容器&#xff0c;那么数据岂不是跟着被销毁了&#x…

【攻防世界-misc】CatCatCat

1.下载附件并解压至桌面&#xff0c; 包含一张图片&#xff0c;一个txt文件&#xff0c;将图片复制到kali桌面上&#xff0c;使用strings命令查看该图片内容是否包含flag字符&#xff0c;得到的内容是密码为&#xff1a;catflag 在查看txt文件时&#xff0c;可以看到在文件名命…

Matlab通信仿真系列——随机信号分析

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、平稳随机过程 1、相…

el-select实现分屏效果

动态绑定class值 &#xff0c;多种判断 :class"type 8 ? home-stye-2 : type 24 ? home-stye-1 : home-stye-3" <div class"home-right-top"><div class"home-right-top-video"><el-row :gutter"20"><el-c…

SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel | 京东云技术团队

前言&#xff1a;作者查阅了Sentinel官网、51CTO、CSDN、码农家园、博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例&#xff0c;因此整理了本文&#xff0c;主要介绍SpringMvc集成Sentinel SpringMvc集成Sentinel 一、Sentinel 介绍 随着微服务的流行&…

docker和docker-compose生产的容器,不在同一个网段,解决方式

在实际项目中&#xff0c;使用docker run xxXx 和docker-compose up -d 不在同一个网段&#xff0c;一个是默认是172.17.x.x, 另一个是172.19.x.x。为解决这个问题需要自定义一个网络&#xff0c;我命名为“my-bridge” 首先熟悉几条命令&#xff1a; docker network ls 或…

UG\NX二次开发 创建对象属性UF_ATTR_set_user_attribute

文章作者:里海 来源网站:里海NX二次开发3000例专栏 简介 创建对象属性UF_ATTR_set_user_attribute,这是一个新函数用于替代UF_ATTR_assign,旧版本NX是用UF_ATTR_assign函数创建、更新属性值,请参照这篇文章《UG\NX二次开发 创建对象属性UF_ATTR_assign》 下面是这个新函数…

什么是requestIdleCallback?和requestAnimationFrame有什么区别?

什么是requestIdleCallback? 我们都知道React 16实现了新的调度策略(Fiber), 新的调度策略提到的异步、可中断&#xff0c;其实就是基于浏览器的 requestIdleCallback和requestAnimationFrame两个API。 在 JavaScript 中&#xff0c;requestIdleCallback 是一个用于执行回调函…

算法通关第十七关黄金挑战——透析跳跃问题

大家好&#xff0c;我是怒码少年小码。 本篇是贪心思想的跳跃问题专题&#xff0c;跳跃问题出现的频率很高。 跳跃游戏 LeetCode 55&#xff1a;给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 …

【数据结构】——排序

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【网络奇遇之旅】:那年我与计算机网络的初相遇

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 计算机网络 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 一. 前言二. 计算机网络的定义三. 计算机网络的功能3.1 资源共享3.2 通信功能3.3 其他功能 四. 计算机网络…

Mysql 递归查询子类Id的所有父类Id

文章目录 问题描述先看结果表结构展示实现递归查询集合查询结果修复数据 问题描述 最近开发过程中遇到一个问题,每次添加代理关系都要去递归查询一下它在不在这个代理关系树上.很麻烦也很浪费资源.想着把代理关系的父类全部存起来 先看结果 表结构展示 表名(t_agent_user_rela…

如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 技术细节 目录 Appuploader 常见错误及解决方法 苹果APP安装包ipa如何安装在手机上&#xff1f;很多人不知道怎么把ipa文件安装到手机上&#xff0c;这里就整理了苹果APP安装到iOS设备上的方式&#xff0c;仅供参考 苹…

Linux基础指令

1.ls指令 【语法】ls 目录/普通文件 对于目录&#xff0c;列出目录中的所有文件对于普通文件&#xff0c;列出文件的基本属性 选项&#xff1a; -l 详细列出文件的属性-a 列出当前目录下的文件和隐藏文件-i 显示文件的索引信息-R 以递归的方式显示目录下的文件 1.1 [ls -l…