//////////////////////////////////////////////////////////////
//约化对称矩阵为三对角对称矩阵
//利用Householder变换将n阶实帆做对称矩阵约化为对称三对角矩阵
//a-长度为n*n的数组,存放n阶实对称矩阵
//n-矩阵的阶数
//q-长度为n*n的数组,返回时存放Householder变换矩阵
//b-长度为n的数组,返回时存放三对角阵的主对角线元素
//c-长度为n的数组,返回时前n-1个元素存放次对角线元素
void eastrq(double a[],int n,double q[],double b[],double c[])
//////////////////////////////////////////////////////////////
//求实对称三对角对称矩阵的全部特征值及特征向量
//利用变型QR方法计算实对称三对角矩阵全部特征值及特征向量
//n-矩阵的阶数
//b-长度为n的数组,返回时存放三对角阵的主对角线元素
//c-长度为n的数组,返回时前n-1个元素存放次对角线元素
//q-长度为n*n的数组,若存放单位矩阵,则返回实对称三对角矩阵的特征向量组
// 若存放Householder变换矩阵,则返回实对称矩阵A的特征向量组
//a-长度为n*n的数组,存放n阶实对称矩阵
int ebstq(int n,double b[],double c[],double q[],double eps,int l)
//////////////////////////////////////////////////////////////
//约化实矩阵为赫申伯格(Hessen berg)矩阵
//利用歼漏初等相似变换将n阶实矩阵约化为上H矩阵
//a-长度为n*n的数组,存放n阶实矩阵,返回时存放上H矩阵
//n-矩阵的阶数
void echbg(double a[],int n)
//////////////////////////////////////////////////////////////
//求赫申伯格(Hessen berg)矩阵的全部特征值
//返回值小于0表示超过迭代jt次仍未达到精度要求
//返回值大于0表示正常返回
//利用带原点位移的双重步QR方法求上H矩阵的全部特征值
//a-长度为n*n的数组,存放上H矩阵
//n-矩阵的阶数
//u-长度为n的数组,返回n个特征值的实部
//v-长度为n的数组,返回n个特征值的虚部
//eps-控制精度要求
//jt-整型变量,控制最大迭代次数
int edqr(double a[],int n,double u[],double v[],double eps,int jt)
//////////////////////////////////////////////////////////////
//求实对称矩阵的特征值及特征向量的雅格比法
//利用雅格比(Jacobi)方法求实对称矩阵的全部特征值及特征向量
//返回值小于0表示超过迭代jt次仍未达到精度要求
//返回值大于0表示正常返回
//a-长度为n*n的数组,存放实对称矩阵,返回时对角线存放n个特征值
//n-矩阵的阶数
//u-长度为n*n的数组,返回特征向量(按氏轿烂列存储)
//eps-控制精度要求
//jt-整型变量,控制最大迭代次数
int eejcb(double a[],int n,double v[],double eps,int jt)
//////////////////////////////////////////////////////////////
选自<<徐世良数值计算程序集(C)>>
每个程序都加上了适当地注释,陆陆续续干了几个月才整理出来的啊。
今天都给贴出来了
#include "stdio.h"
#include "math.h"
//约化对称矩阵为三对角对称矩阵
//利用Householder变换将n阶实对称矩阵约化为对称三对角矩阵
//a-长度为n*n的数组,存放n阶实对称矩阵
//n-矩阵的阶数
//q-长度为n*n的数组,返回时存放Householder变换矩阵
//b-长度为n的数组,返回时存放三对角阵的主对角线元素
//c-长度为n的数组,返回时前n-1个元素存放次对角线元素
vectorProduct 这个函数写的有问题, 看函数的实现, length应该是指数组vecB和vecB中的数据个数, 但是在函数里明明已经写了是3, 这个参数就是多余的, 它只能等于3.另外, 这个程序为了表示是3维向量, 定义了一个常数#define VECSIZE 3
但是在这里又直接写3, 不一致.
这样虽然不会出错, 但是给理解造成困惑.
vectorNorm 也一样.
double x[VECSIZE] = {0.0,1.0,0.0}
这个是这里作为示例, 求两个向量的返昌州夹角的第一个向量的变量,
变量名是x, 而不是X轴, 而这个向量是y轴的,
这样同样是容易让人困惑, 下面的y同理.
这样, 整个程序的含义是:
函数迅运 vectorProduct求两个向量的点积
函数 vectorNorm 求向量的模(长度)
main函数是示例:
定义了x和y两个向量,
用vectorNorm分别求出两个向量的模, xNorm, yNorm
用vectorProduct求出两个向量的叉积, 然后除以两个向量的模, 得到夹角的余弦值, cos_phi
用acos反余弦求出两个向量的夹角(单位弧度), 然后换算成漏蔽角度为单位, cos_phi
a,b的夹角=x
a,b=|a||b|cosx(1)
|axb|=|a||b|sinx(2)
(1)/(2)
tanx=|axb|/(a。b)
假设a×b=A,a·b=B
a×b=absinΘ
a·b=abcosΘ
两式相除 A/B =sinΘ/cosΘ=tanΘ
含义:
当两个角的度数之和等于180°,即一个平角,这两个角便是互补角。若两个相邻的角互为余角,两个非共用边会形成一直线。不过两个不相邻的角也可以是补角,例如平行四边形中,任两邻角为互补角。圆内接四边谈冲腊形的对角也是互补角。
若点含滑P为圆O外的一点,而过点P作圆的切线,切点分别在点T和点Q,则∠TPQ和∠TOQ为互补角。两互补角的正弦相等,其余弦及判顷正切(若有定义义)大小相等,但符号异号。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)