【数据结构6】二叉树的基本操作

文章目录

  • ⭐️写在前面的话⭐️
  • 二叉树的一些基本操作
    • 1、结构定义
    • 2、先序创建这棵树
    • 3、按满二叉树方式创建
    • 4、三种递归遍历
    • 5、层次遍历
    • 6、求二叉树的深度
    • 7、求叶子结点数
    • 8、三种非递归遍历
    • 9、先序线索化二叉树
    • 10、先序线索化后遍历
    • 11、中序线索化二叉树
    • 12、中序线索化后遍历
    • 主函数
  • 程序源码
    • 运行截图

⭐️写在前面的话⭐️

📒博客主页: 程序员好冰
🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】
📌本文由 程序员好冰 原创,CSDN 首发!
📆入站时间: 🌴2022 年 07 月 13 日🌴
✉️ 是非不入松风耳,花落花开只读书。
💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》
💬参考在线编程网站:🌐牛客网🌐力扣
🍭 作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!🍭


二叉树的一些基本操作

1、结构定义

#include <stdio.h>
#include <stdlib.h>#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1#define Nil '#'#define MAX_SIZE 1024typedef int Status;
typedef char ElemType;typedef struct BiTNode
{ElemType data;struct BiTNode *LChild,*RChild;/*左标志,0为指向左子节点,1为指向前驱(即线索)右标志,0为指向右子节点,1为指向后继(即线索)*/int Ltag,Rtag;//供线索化二叉树使用
}BiTNode,*BiTree;

2、先序创建这棵树

void PreCreateBiTree(BiTree *T)
{ElemType ch;getchar();ch=getchar();if(ch==Nil){*T=NULL;//说明这棵子树为空}if(ch!=Nil){*T=(BiTree)malloc(sizeof(BiTNode));(*T)->data=ch;/*线索化线索化二叉树增加的*/(*T)->Ltag=(*T)->Rtag=0;PreCreateBiTree(&((*T)->LChild));PreCreateBiTree(&((*T)->RChild));}
}

3、按满二叉树方式创建

void FullCreateBiTree(BiTree *T)
{BiTNode *p;BiTNode *arr[MAX_SIZE];char ch;int i,j;while(1){scanf("%d",&i);getchar();if(i==0){break;}if(i!=0){ch=getchar();if(ch==Nil){continue;}p=(BiTNode*)malloc(sizeof(BiTNode));p->data=ch;p->Ltag=p->Rtag=0;p->LChild=NULL;p->RChild=NULL;arr[i]=p;if(i==1){*T=p;}if(i!=1){j=i/2;if(i%2==0){arr[j]->LChild=p;}if(i%2!=0){arr[j]->RChild=p;}}}}
}

4、三种递归遍历

//先序递归遍历
void PreOrderTraverse(BiTree T)
{if(T==NULL){return;}printf("%c ",T->data);PreOrderTraverse(T->LChild);PreOrderTraverse(T->RChild);
}//中序递归遍历
void InOrderTraverse(BiTree T)
{if(T==NULL){return;}InOrderTraverse(T->LChild);printf("%c ",T->data);InOrderTraverse(T->RChild);
}//后序递归遍历
void PostOrderTraverse(BiTree T)
{if(T==NULL){return;}PostOrderTraverse(T->LChild);PostOrderTraverse(T->RChild);printf("%c ",T->data);
}

5、层次遍历

/*构建队列*/
int front=0,rear=0;
void EnQueue(BiTree *t,BiTree node)
{//结点入队if(rear==MAX_SIZE){exit(0);}t[rear++]=node;
}
BiTNode* DeQueue(BiTree *t)
{//结点出队if(front==rear){exit(0);}return t[front++];
}
void LevelOrderTraverse(BiTree T)
{if(T){BiTree t[MAX_SIZE]={0};BiTNode *p=NULL;p=T;EnQueue(t,p);while(front<rear){p=DeQueue(t);printf("%c ",p->data);if(p->LChild){EnQueue(t,p->LChild);}if(p->RChild){EnQueue(t,p->RChild);}}}
}

6、求二叉树的深度

int BiTreeDepth(BiTree T)
{int left=0,right=0;if(!T){return 0;}if(T->LChild){left=BiTreeDepth(T->LChild);}if(T->RChild){right=BiTreeDepth(T->RChild);}return left>right?left+1:right+1;
}

7、求叶子结点数

int Count_Leaves(BiTree T)
{if(!T){return 0;}if(!(T->LChild)&&!(T->RChild)){return 1;}return Count_Leaves(T->LChild)+Count_Leaves(T->RChild);
}

8、三种非递归遍历

//先序非递归遍历
void PreOrderTraverse2(BiTree T)
{if(!T){return;}//创建一个数组来模拟栈BiTree stack[MAX_SIZE]={0};int top=-1;stack[++top]=T;while(top>-1){BiTree node=stack[top--];printf("%c ",node->data);if(node->RChild){stack[++top]=node->RChild;}if(node->LChild){stack[++top]=node->LChild;}}
}//中序非递归遍历
void InOrderTraverse2(BiTree T)
{if(!T){return;}BiTree stack[MAX_SIZE]={0};int top=-1;BiTree node=T;while(top>-1||node!=NULL){while(node!=NULL){//一直深入左节点stack[++top]=node;node=node->LChild;}node=stack[top--];printf("%c ",node->data);node=node->RChild;}
}//后序非递归遍历
void PostOrderTraverse2(BiTree T)
{if(!T){return;}BiTree stack1[MAX_SIZE]={0};BiTree stack2[MAX_SIZE]={0};int top1=-1;int top2=-1;BiTree node=T;stack1[++top1]=node;while(top1>-1){node=stack1[top1--];stack2[++top2]=node;if(node->LChild!=NULL){stack1[++top1]=node->LChild;}if(node->RChild!=NULL){stack1[++top1]=node->RChild;}}while(top2>-1){printf("%c ",stack2[top2--]->data);}
}

9、先序线索化二叉树

BiTree pre=NULL;// 全局变量,用于记录前驱节点
void PreOrder_Threading(BiTree T)
{if(T==NULL){return;}if(T->LChild ==NULL){T->Ltag=1;T->LChild=pre;//Ltag为1,指向前驱}if(pre!=NULL && pre->RChild==NULL){pre->Rtag=1;pre->RChild=T;//Rtag为1,指向后继}pre=T;if(T->Ltag==0){PreOrder_Threading(T->LChild);}if(T->Rtag==0){PreOrder_Threading(T->RChild);}
}

10、先序线索化后遍历

void PreOrder_Threading_Traverse(BiTree T)
{BiTree temp=T;while(temp!=NULL){printf("%c ",temp->data);if(temp->Ltag==0){temp=temp->LChild;}else{temp=temp->RChild;//寻找后继}}
}

11、中序线索化二叉树

BiTree pre2=NULL;// 全局变量,用于记录前驱节点
void InOrder_Threading(BiTree T)
{if(T==NULL){return;}if(T->Ltag==0){InOrder_Threading(T->LChild);}//深入到树的最左边的结点if(T->LChild ==NULL){T->Ltag=1;T->LChild=pre2;//Ltag为1,指向前驱}if(pre2!=NULL && pre2->RChild==NULL){pre2->Rtag=1;pre2->RChild=T;//Rtag为1,指向后继}pre2=T;if(T->Rtag==0){InOrder_Threading(T->RChild);}
}

12、中序线索化后遍历

void InOrder_Threading_Traverse(BiTree T)
{BiTree p=T;while(p){while(p->Ltag==0){p=p->LChild;}//深入到最左边的结点printf("%c ",p->data);while(p->Rtag==1&&p->RChild!=NULL){//p->RChild!=NULL说明不是最后一个结点,这个接地那没有后继,指向NULLp=p->RChild;//找到后继节点printf("%c ",p->data);}p=p->RChild;}
}

主函数

int main()
{BiTree T;int flag;printf("请输入需要的创建方式(1为先序,2为满二叉):");scanf("%d",&flag);switch(flag){case 1://先序创建这棵树printf("按先序方式创建这棵树pre_T('#'表示空):\n");PreCreateBiTree(&T);printf("成功.\n");break;case 2://按满二叉树方式创建printf("按满二叉树方式创建这棵树full_T(以 1 A 为输入0结束例):\n");FullCreateBiTree(&T);printf("成功.\n");break;default:printf("你输入的序号有误.\n");break;}//递归遍历(三种:前中后)printf("先序递归的结果:");PreOrderTraverse(T);printf("\n");printf("成功.\n");printf("中序递归的结果:");InOrderTraverse(T);printf("\n");printf("成功.\n");printf("后序递归的结果:");PostOrderTraverse(T);printf("\n");printf("成功.\n");//非递归遍历(三种:前中后)printf("先序非递归的结果:");PreOrderTraverse2(T);printf("\n");printf("成功.\n");printf("中序非递归的结果:");InOrderTraverse2(T);printf("\n");printf("成功.\n");printf("后序非递归的结果:");PostOrderTraverse2(T);printf("\n");printf("成功.\n");//层次遍历printf("层序遍历的结果:");LevelOrderTraverse(T);printf("\n");printf("成功.\n");//求叶子结点数printf("这棵树的叶子结点数为:%d.\n",Count_Leaves(T));//求二叉树的深度printf("这棵树的深度为:%d.\n",BiTreeDepth(T));printf("================\n");printf("1、先序线索化.\n");printf("2、中序线索化.\n");printf("请输入需要线索化的形式:");int flag2;scanf("%d",&flag2);switch(flag2){case 1://先序线索化二叉树并遍历PreOrder_Threading(T);printf("先序线索化二叉树并遍历,结果为:");PreOrder_Threading_Traverse(T);break;case 2://中序线索化二叉树并遍历InOrder_Threading(T);printf("中序线索化二叉树并遍历,结果为:");InOrder_Threading_Traverse(T);break;default:printf("你输入的序号有误.\n");break;}return 0;
}

程序源码

#include <stdio.h>
#include <stdlib.h>#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1#define Nil '#'#define MAX_SIZE 1024typedef int Status;
typedef char ElemType;typedef struct BiTNode
{ElemType data;struct BiTNode *LChild,*RChild;/*左标志,0为指向左子节点,1为指向前驱(即线索)右标志,0为指向右子节点,1为指向后继(即线索)*/int Ltag,Rtag;//供线索化二叉树使用
}BiTNode,*BiTree;//先序创建这棵树
void PreCreateBiTree(BiTree *T)
{ElemType ch;getchar();ch=getchar();if(ch==Nil){*T=NULL;//说明这棵子树为空}if(ch!=Nil){*T=(BiTree)malloc(sizeof(BiTNode));(*T)->data=ch;/*线索化线索化二叉树增加的*/(*T)->Ltag=(*T)->Rtag=0;PreCreateBiTree(&((*T)->LChild));PreCreateBiTree(&((*T)->RChild));}
}//按满二叉树方式创建
void FullCreateBiTree(BiTree *T)
{BiTNode *p;BiTNode *arr[MAX_SIZE];char ch;int i,j;while(1){scanf("%d",&i);getchar();if(i==0){break;}if(i!=0){ch=getchar();if(ch==Nil){continue;}p=(BiTNode*)malloc(sizeof(BiTNode));p->data=ch;p->Ltag=p->Rtag=0;p->LChild=NULL;p->RChild=NULL;arr[i]=p;if(i==1){*T=p;}if(i!=1){j=i/2;if(i%2==0){arr[j]->LChild=p;}if(i%2!=0){arr[j]->RChild=p;}}}}
}//先序递归遍历
void PreOrderTraverse(BiTree T)
{if(T==NULL){return;}printf("%c ",T->data);PreOrderTraverse(T->LChild);PreOrderTraverse(T->RChild);
}//中序递归遍历
void InOrderTraverse(BiTree T)
{if(T==NULL){return;}InOrderTraverse(T->LChild);printf("%c ",T->data);InOrderTraverse(T->RChild);
}//后序递归遍历
void PostOrderTraverse(BiTree T)
{if(T==NULL){return;}PostOrderTraverse(T->LChild);PostOrderTraverse(T->RChild);printf("%c ",T->data);
}//层次遍历
/*构建队列*/
int front=0,rear=0;
void EnQueue(BiTree *t,BiTree node)
{//结点入队if(rear==MAX_SIZE){exit(0);}t[rear++]=node;
}
BiTNode* DeQueue(BiTree *t)
{//结点出队if(front==rear){exit(0);}return t[front++];
}
void LevelOrderTraverse(BiTree T)
{if(T){BiTree t[MAX_SIZE]={0};BiTNode *p=NULL;p=T;EnQueue(t,p);while(front<rear){p=DeQueue(t);printf("%c ",p->data);if(p->LChild){EnQueue(t,p->LChild);}if(p->RChild){EnQueue(t,p->RChild);}}}
}//求二叉树的深度
int BiTreeDepth(BiTree T)
{int left=0,right=0;if(!T){return 0;}if(T->LChild){left=BiTreeDepth(T->LChild);}if(T->RChild){right=BiTreeDepth(T->RChild);}return left>right?left+1:right+1;
}//求叶子结点数
int Count_Leaves(BiTree T)
{if(!T){return 0;}if(!(T->LChild)&&!(T->RChild)){return 1;}return Count_Leaves(T->LChild)+Count_Leaves(T->RChild);
}//先序非递归遍历
void PreOrderTraverse2(BiTree T)
{if(!T){return;}//创建一个数组来模拟栈BiTree stack[MAX_SIZE]={0};int top=-1;stack[++top]=T;while(top>-1){BiTree node=stack[top--];printf("%c ",node->data);if(node->RChild){stack[++top]=node->RChild;}if(node->LChild){stack[++top]=node->LChild;}}
}//中序非递归遍历
void InOrderTraverse2(BiTree T)
{if(!T){return;}BiTree stack[MAX_SIZE]={0};int top=-1;BiTree node=T;while(top>-1||node!=NULL){while(node!=NULL){//一直深入左节点stack[++top]=node;node=node->LChild;}node=stack[top--];printf("%c ",node->data);node=node->RChild;}
}//后序非递归遍历
void PostOrderTraverse2(BiTree T)
{if(!T){return;}BiTree stack1[MAX_SIZE]={0};BiTree stack2[MAX_SIZE]={0};int top1=-1;int top2=-1;BiTree node=T;stack1[++top1]=node;while(top1>-1){node=stack1[top1--];stack2[++top2]=node;if(node->LChild!=NULL){stack1[++top1]=node->LChild;}if(node->RChild!=NULL){stack1[++top1]=node->RChild;}}while(top2>-1){printf("%c ",stack2[top2--]->data);}
}/*=======================================================================*///先序线索化二叉树
BiTree pre=NULL;// 全局变量,用于记录前驱节点
void PreOrder_Threading(BiTree T)
{if(T==NULL){return;}if(T->LChild ==NULL){T->Ltag=1;T->LChild=pre;//Ltag为1,指向前驱}if(pre!=NULL && pre->RChild==NULL){pre->Rtag=1;pre->RChild=T;//Rtag为1,指向后继}pre=T;if(T->Ltag==0){PreOrder_Threading(T->LChild);}if(T->Rtag==0){PreOrder_Threading(T->RChild);}
}//先序线索化后遍历
void PreOrder_Threading_Traverse(BiTree T)
{BiTree temp=T;while(temp!=NULL){printf("%c ",temp->data);if(temp->Ltag==0){temp=temp->LChild;}else{temp=temp->RChild;//寻找后继}}
}/*=======================================================================*///中序线索化二叉树
BiTree pre2=NULL;// 全局变量,用于记录前驱节点
void InOrder_Threading(BiTree T)
{if(T==NULL){return;}if(T->Ltag==0){InOrder_Threading(T->LChild);}//深入到树的最左边的结点if(T->LChild ==NULL){T->Ltag=1;T->LChild=pre2;//Ltag为1,指向前驱}if(pre2!=NULL && pre2->RChild==NULL){pre2->Rtag=1;pre2->RChild=T;//Rtag为1,指向后继}pre2=T;if(T->Rtag==0){InOrder_Threading(T->RChild);}
}//中序线索化后遍历
void InOrder_Threading_Traverse(BiTree T)
{BiTree p=T;while(p){while(p->Ltag==0){p=p->LChild;}//深入到最左边的结点printf("%c ",p->data);while(p->Rtag==1&&p->RChild!=NULL){//p->RChild!=NULL说明不是最后一个结点,这个接地那没有后继,指向NULLp=p->RChild;//找到后继节点printf("%c ",p->data);}p=p->RChild;}
}/*=======================================================================*/int main()
{BiTree T;int flag;printf("请输入需要的创建方式(1为先序,2为满二叉):");scanf("%d",&flag);switch(flag){case 1://先序创建这棵树printf("按先序方式创建这棵树pre_T('#'表示空):\n");PreCreateBiTree(&T);printf("成功.\n");break;case 2://按满二叉树方式创建printf("按满二叉树方式创建这棵树full_T(以 1 A 为输入0结束例):\n");FullCreateBiTree(&T);printf("成功.\n");break;default:printf("你输入的序号有误.\n");break;}//递归遍历(三种:前中后)printf("先序递归的结果:");PreOrderTraverse(T);printf("\n");printf("成功.\n");printf("中序递归的结果:");InOrderTraverse(T);printf("\n");printf("成功.\n");printf("后序递归的结果:");PostOrderTraverse(T);printf("\n");printf("成功.\n");//非递归遍历(三种:前中后)printf("先序非递归的结果:");PreOrderTraverse2(T);printf("\n");printf("成功.\n");printf("中序非递归的结果:");InOrderTraverse2(T);printf("\n");printf("成功.\n");printf("后序非递归的结果:");PostOrderTraverse2(T);printf("\n");printf("成功.\n");//层次遍历printf("层序遍历的结果:");LevelOrderTraverse(T);printf("\n");printf("成功.\n");//求叶子结点数printf("这棵树的叶子结点数为:%d.\n",Count_Leaves(T));//求二叉树的深度printf("这棵树的深度为:%d.\n",BiTreeDepth(T));printf("================\n");printf("1、先序线索化.\n");printf("2、中序线索化.\n");printf("请输入需要线索化的形式:");int flag2;scanf("%d",&flag2);switch(flag2){case 1://先序线索化二叉树并遍历PreOrder_Threading(T);printf("先序线索化二叉树并遍历,结果为:");PreOrder_Threading_Traverse(T);break;case 2://中序线索化二叉树并遍历InOrder_Threading(T);printf("中序线索化二叉树并遍历,结果为:");InOrder_Threading_Traverse(T);break;default:printf("你输入的序号有误.\n");break;}return 0;
}

运行截图

image-20230530141756319

🚀先看后赞,养成习惯!🚀

🚀 先看后赞,养成习惯!🚀

🎈觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!🎈


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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C语言——每日一题

1.倒置字符串 倒置字符串 要将每一个单词逆序输出&#xff0c;首先可以将整个字符串内容都逆序输出&#xff0c;然后再将字符串中的每一个单词再进行逆序。 例如&#xff1a;逆序 i like beijing. 先逆序成&#xff1a;.gnijieb ekil i 再将每个单词逆序&#xff1a; beij…

Matlab实现曲线拟合的最小二乘法

实验条件 实验用例 x0102030405060708090y6867.166.465.664.661.861.060.860.460 实验要求 利用曲线拟合的线性最小二乘法求被逼近函数f(x)在点x55处的近似值&#xff0c;并画出实验数据和直线。 代码实现 X[0,10,20,30,40,50,60,70,80,90]; Y[68,67.1,66.4,65.6,64.6,61.…

达梦数据库8安装教程

第一步&#xff1a;双击驱动 注意&#xff1a;如果双击显示没有驱动&#xff0c;则安装WinCDEmu软件。 第二步&#xff1a;双击setup.exe安装包 第三步&#xff1a;选择时区 第四步&#xff1a;验证key文件 因为我们是免费试用&#xff0c;所以没有key文件&#xff0c;直接下一…

线性回归——最小二乘法

线性回归&#xff1a;自变量和因变量之间是线性关系&#xff0c;例如&#xff1a;h a0a1x1a2x2…anxn。线性回归预测的一般步骤&#xff1a;假设特征变量Xi满足线性关系&#xff0c;然后根据给定的训练数据训练出一个模型&#xff0c;最后通过此模型进行预测。线性回归的根本就…

最小二乘法多项式曲线拟合原理与实现(数学公式详细推导,代码方面详细注释)

最小二乘法概念&#xff1a; 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘…

对「曲线拟合」和「最小二乘法」的个人理解

在工程实践中&#xff0c;经常遇到类似的问题: 我们做了n次实验&#xff0c;获得了一组数据 然后&#xff0c;我们希望知道x和y之间的函数关系。所以我们将其描绘在XOY直角坐标系下&#xff0c;得到下面这么一张点云图&#xff1a; 然后&#xff0c;我们发现&#xff0c;x和y…

最小二乘法实现曲线拟合

说明&#xff0c;本文章的源代码来着于网络&#xff0c;本人已在实际项目中反复使用过&#xff0c;证明没问题。 1.简介 已知曲线上的n个点&#xff0c;可以使用某条曲线去拟合&#xff0c;使得整体上所有的点都逼近曲线&#xff0c;可以使用不同的角度去判断整体逼近&#x…

最小二乘法直线拟合汇总

原文链接&#xff1a;https://www.jianshu.com/p/1c4f3edbaa47 首先最小二乘法是面对不连续的离散点。 它的本质是求某些参数&#xff0c;估计值在整体下可以使误差ε最小。 对于离散点的直线拟合、曲线拟合是在满足误差最小的基础上&#xff0c;得出可以用数学函数式表达的可…

线性回归----最小二乘法

目录 线性回归&#xff1a;就是把离散的数据拟合到一条直线上&#xff0c;获得一个直线方程来近似的描述这些离散的数据 最小二乘法&#xff1a;是用数学公式直接求解线性回归方程的参数的方法。 例&#xff1a; 使用美国汽车油耗数据中的排量disp作为X&#xff0c;油耗MPG作…

曲线拟合——最小二乘拟合(附代码)

曲线拟合——最小二乘拟合&#xff08;附代码&#xff09; 曲线拟合1 一元函数的最小二乘拟合1.1 线性回归&#xff08;直线的最小二乘拟合&#xff09;1.1.1 直线的最佳拟合方法1.1.2 如何计算1.1.3 误差量化分析 1.2 多项式回归&#xff08;多项式的最小二乘拟合&#xff09;…

插值与拟合 (二) : 曲线拟合的线性最小二乘法

目录 1 线性最小二乘法 最小二乘准则 系数 的确定 1.2 函数 的选取 常用的拟合曲线&#xff1a;直线、多项式曲线、双曲线、指数曲线 2 最小二乘法的 Matlab 实现 2.1 解方程组方法 2.2 多项式拟合方法 apolyfit(x0,y0,m) …

最小二乘法多项式曲线拟合及其python实现

最小二乘法多项式曲线拟合及其python实现 多项式曲线拟合问题描述最小二乘法针对overfitting&#xff0c;加入正则项python实现运行结果 多项式曲线拟合问题描述 问题描述&#xff1a;给定一些数据点&#xff0c;用一个多项式尽可能好的拟合出这些点排布的轨迹&#xff0c;并给…

数值分析——曲线拟合的最小二乘法

文章目录 一、曲线拟合的最小二乘原理1. 超定方程组的最小二乘解解题方法&#xff1a; 2. 直线拟合3. 多项式拟合 一、曲线拟合的最小二乘原理 拟合曲线定义&#xff1a;求近似函数 φ(x), 使之 “最好” 的逼近f(x) ,无需满足插值原则. 这就是曲线拟合问题。 &#xff08;时间…

最小二乘法的曲线拟合方法在MATLAB中的实现

一、实验内容 已知一组实验数据如下表&#xff0c;求它的拟合曲线。 x(i)12345 f(i)44.5688.5 w(i)21311 二、程序清单与运行结果 M文件代码如下&#xff1a; function Smypolyfit(X,F,W,m,n) % mypolyfit输出通过最小二乘法求得的拟合曲线并绘图验证 % 例如&#xff1a; …

UFS 1-UFS架构简介1

UFS 1-UFS架构简介 1 UFS是什么&#xff1f;1.1 UFS1.2 一般特征1.2.1 Target performance1.2.2 Target host applications1.2.3 Target device types1.2.4 Topology1.2.5 UFS Layering 1.3 Interface Features1.3.1 Three power supplies1.3.2 Signaling as defined by [MIPI-…

最小二乘法线性拟合和2次曲线拟合算法

最近由于项目要求&#xff0c;应用了最小二乘法线性拟合和2次曲线拟合算法&#xff0c;现总结如下&#xff1a; 最小二乘法线性拟合应用已有的采样时间点&#xff0c;再现这些点所描述的线性变化&#xff0c;即求出一个线性方程yaxb(这个算法的主要问题也就是如何用给定的数据…

数值分析实验四 最小二乘法曲线拟合

一、实验目的 1.使用不同的模型对数据进行最小二乘拟合&#xff1b; 2.分析使用不同模型最小二乘法对数据进行拟合的RMSE(均方根误差)&#xff1b; 3.根据分析结果求出最合理的拟合模型。 二、实验题目 1.用表1-1中的世界人口统计数值估计1980年的人口&#xff0c;求最佳最小…

最小二乘法的拟合原理

一. 最小二乘法的拟合原理 根据《数学指南》书中的解释: 图2 《数学指南》中对最小二乘法的解释 上面这段话&#xff0c;枯燥且无趣&#xff0c;大家不用厌恶&#xff0c;数学向来这个样子。 现在&#xff0c;我们来慢慢认识上面这段话的意思&#xff0c;这句话的意思是说&a…

最小二乘法拟合直线

曲线拟合中最基本和最常用的是直线拟合。设x和y之间的函数关系为&#xff1a; y&#xff1d;abx 式中有两个待定参数&#xff0c;a代表截距&#xff0c;b代表斜率。对于等精度测量所得到的N组数据&#xff08;xi&#xff0c;yi&#xff09;&#xff0c;i&#xff1d;1&#xff…

多项式函数曲线拟合——最小二乘法

多项式函数拟合的任务是假设给定数据由M次多项式函数生成&#xff0c;选择最有可能产生这些数据的M次多项式函数&#xff0c;即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术…