用C语言编写一个阿达玛矩阵

Python06

用C语言编写一个阿达玛矩阵,第1张

求y'和y'',就是求y的一、二阶导数,代入曲率公式,然后利用曲率公式——具体公式自己去查书——得出一个关于x的多项式,直接求出最大值来就可以了,然后好好看看这个知识。

-----好吧写仔细点-----------

曲率公式:k=|y''|/(1+y'2)^(3/2)

y'=-2x/(1-x^2)

y''=[-2(1-x^2)-4x^2]/(1-x^2)^2=(-2-2x^2)/(1-x^2)^2

这样就可以求出曲率k:

k=2(1+x^2)/(1-x^2)^2 / [1+ 4x^2/(1-x^2)^2]^(3/2)

至于这个式子的最值,我不想求了,确实很麻烦。不过我想求多项式的最值应该不是很难吧,就是麻烦。认真细心总能算对的。

三点,只要不共线就能确定唯一的一个圆。

根据这个原理,先求出三点确定的三角形的三边长度,再用余弦定理求出一个角,设这个角是∠A,它的对边长度是a,那么这个圆弧的曲率半径就是0.5a/cosA,曲率就是曲率半径的倒数。

我没装TC,vc的代码

注意:

1.改掉相关头文件

2.注意//,/**/ tc ,vc里不一样

#include <iostream> //改为stdio.h

#include <math.h>

#include <conio.h>

using namespace std

bool isCollinear(double x1,double y1,double x2,double y2,double x3,double y3)

double length(double x1,double y1,double x2,double y2)

double cosine(double a,double b,double c)//返回角A

int main(){

double x1,y1,x2,y2,x3,y3 //三点坐标

cin>>x1>>y1>>x2>>y2>>x3>>y3//你在TC里改为scanf()

if(isCollinear(x1,y1,x2,y2,x3,y3)){

cout<<"三点共线"//改为printf()

getch()

return 0

}

double a=length(x2,y2,x3,y3),b=length(x1,y1,x3,y3),c=length(x1,y1,x2,y2)

double radius=0.5*a/sin(acos(cosine(a,b,c))), //半径

curvature=1.0/radius//曲率

cout<<"radius="<<radius<<"\ncurvature="<<curvature<<endl

getch()

return 0

}

bool isCollinear(double x1,double y1,double x2,double y2,double x3,double y3){

//注意:这只是一种粗糙的判断方法,由于浮点数的问题,这样是不安全的做法。安全做法:化为整数,使用大数组处理

//如果你实在要判断,把注释去掉

/*

if (fabs( (x3-x1)*(y2-y1) - (y3-y1)*(x2-x1) ) < 1e-6 )

return true

else

*/

return false

}

double length(double x1,double y1,double x2,double y2){

return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

}

double cosine(double a,double b,double c){

return (c*c+b*b-a*a)/2/b/c

}

计算模型

f(x)=sin(x)+x^2曲率计算

计算方法

利用符号运算

算法流程

(1)用符号表示表示f(x)

(2)求f(x)的一阶导数,二阶导数

(3)根据曲率半径定义r=|(1+y'^2)^(3/2)/y''|

计算代码。

clcclear all

syms x

f=sin(x)+x^2

f1=diff(f,x)

f2=diff(f1,x)

r=(1+f1^2)^(3/2)/f2

xx=0:0.1:30rr=zeros(size(xx))

MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。