用C语言编写一个计算两个向量叉积的程序

用C语言编写一个计算两个向量叉积的程序,第1张

//数值计算程序-特征值和特征向量

//////////////////////////////////////////////////////////////

//约化对称矩阵为三对角对称矩阵

//利用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个元素存放次对角线元素

从代码上看没有问题。

如果你是新安装的编译器,那么有可能是编译器配置问题。 (Error spawning cl.exe)

也有可能是你工程中加了不止一岩悔个文件。(function main )

建议你鼠标点在1 errors位置,然后鼠标滚轮向上滚孝枣禅动,查看具体错误信息。根据错误信息分巧尘析具体原因。

问的有些问题,程序建立的2叉树只能是完全2叉树,其他的树只能手动建立,我这里给你完全2叉树的建立和遍历,完全2叉树是没有插入的,给你函数

#include<stdio.h>

#include<stdlib.h>

typedef struct _node_

{

int data

struct _node_ *lchild,*rchild

}bitree

//递归建立完全2x树,root每次遍历后都会返回上层树的根节点,这点容易理解错,最终返回的root是整个2x树的根节点,传参int i 是给2x树赋值:1,2,3,4,5……,int n是想建立的总共节点数。

bitree *CreatBitree(int i,int n)

{

bitree *root = (bitree*)malloc(sizeof(bitree))

root->data = i

if(i * 2 <= n)

root->lchild = CreatBitree(2 * i,n)

else root->lchild = NULL

if(i * 2 + 1 <历缺肢=n)

root ->rchild = CreatBitree (2 * i +1,n);

else root->rchild = NULL

return root

}

//遍历

void proorder(bitree* root)

{

if(root == NULL) return

printf("%d ",root->data)

proorder(root->lchild)

proorder(root->rchild)

}//这是根左右遍历即前序遍历,如果想改成中序或者后序只需要把printf改到lchild后和rchild后即可

写完才发现你要层次遍历啊?!,那个还要引入个队列的建立,需要建队,出队,入队的函数,全写出来很麻烦的,写2x树的都不是初学了,我假设你已经有了队列相关函数,给出函数功能注释,然后直接给你层次遍历的函数吧:

void noorder(bitree *root)

{

sequeue *sq//用的顺序队列,没有用链式的,要不更麻烦了,sequeue是typedef的队列结构体

sq = CreatEmptySequeue()//建立空队列

EnSequeue(sq,root)//根节点入队

while(!EmptySequeue(sq))//判断队列是否空

{

root = Desequeue//出列

printf("%d",root->data)

if(root->lchild !=NULL)

EnSequeue(sq,root->lchild)

if(root->rchild != NULL)

EnSequeue(sq ,root->rchild)

}

return

}

算法描述,肢世 利用队列的先进先出的特性,首先把根节点入队列,然后开始循环,先判断队列是否空,取出队首元素并打印,然后检查出列节点的左节点,有的话入队,没有的话检查右节点,有的话入队,开始下次循环,这时队列里是扮慧第二层的左节点和有节点,这次是先打印2层左节点,然后让2层的左孩子节点入队,右孩子入队,然后打印2层右节点,然后2层右节点的左孩子入队,右孩子入队,队列中现在是第3层节点左边依次向右,依次类推,层次打印2x树

看在我折腾了那么多,时隔这么久才有我给答案,分就别吝啬了哈~~~嘿嘿


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

原文地址: https://outofmemory.cn/yw/12564835.html

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

发表评论

登录后才能评论

评论列表(0条)

保存