Matlab内置函数讲解,以及如何转换成对应的C语言①

发布于:2024-06-25 ⋅ 阅读:(136) ⋅ 点赞:(0)

前言:

matlab是一个科研利器,通过该软件可以实现很多科研工作者想实现的功能。例如:软件仿真、数学计算、算法仿真。。。很多。(有句话不是说除了不能生孩子啥都可以干,这里我也没有验证过前者不知道可行不,哈哈开个玩笑!)因为涉及到的知识面太多,我就分章节重点讲其中的某些部分。

重心就是对内置函数做出讲解,同时将内置函数通过c语言的形式表达出来,我这里主要是自己工作过程中自己遇到的问题,在这里进行记录,希望可以帮到有需要的小伙伴。自己水平也是有限,写的不好,或者算法实现不是最优解,也希望不要喷我😊

sort函数

官方对它的解释是:        sort        对数组元素排序

官方的语法有五个,我只讲最常用的三个:

B = sort(A)
B = sort(A,dim)
[B,I] = sort(___)
B = sort(A) 
B = sort(A) 按升序对 A 的元素进行排序。
如果 A 是向量,则 sort(A) 对向量元素进行排序。
如果 A 是矩阵,则 sort(A) 会将 A 的列视为向量并对每列进行排序。 
如果 A 是多维数组,则 sort(A) 沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。

官方例程如下:

创建一个行向量,并按升序对其元素排序。

A = [9 0 -7 5 3 8 -10 4 2];
B = sort(A)
B = 1×9
   -10    -7     0     2     3     4     5     8     9

解释:这里创建了一个一维横向数组,然后把数组A传递到sort函数中输出B,得到是一个新的数组,实际上做的工作是将原有的数组进行从小到大进行有序排列

如何进行C语言的算法转换
#include <stdio.h>

int main(void) {
    //算法部分
   int A[9] = {9,0,-7,5,3,8,-10,4,2};//按照官方的例程定义数组变量
   int c = 0;   //定义临时变量用于存储临时数据,作为中转站
    for(int i=0;i<9;i++){
        for(int j=i+1;j<9;j++){
            if(A[i] > A[j]){
                c = A[i];
                A[i] = A[j];
                A[j] = c;
            }
        }
    }
    for(int i=0;i<9;i++){
                printf("%d\t",A[i]);
    }
    return 0;
}
C:\Users\xiaoqian\CLionProjects\untitled9\cmake-build-debug\untitled9.exe
-10     -7      0       2       3       4       5       8       9
进程已结束,退出代码为 0
B = sort(A,dim)
B = sort(A,dim) 返回 A 沿维度 dim 的排序元素。例如,如果 A 是一个矩阵,则 sort(A,2) 对每行中的元素进行排序。

官方例程如下:

创建一个矩阵,并按升序对每一行排序。
A = [3 6 5; 7 -2 4; 1 0 -9]
A = 3×3
     3     6     5
     7    -2     4
     1     0    -9
B = sort(A,2)
B = 3×3
     3     5     6
    -2     4     7
    -9     0     1

解释:这里创建了一个2x2的矩阵A,通俗讲就是2x2数组,通过sort函数进行计算,输出一个新的2x2数组B,这里主要进行的算法计算是,将每一行的从小到大进行排序。注意:B = sort(A,2),这里的2是维度的意思,如果填1就是对一列进行排序,填2对行进行排序。

如何进行C语言的算法转换
#include <stdio.h>

int main(void) {

    //按照官方的例程定义数组变量
    int A[3][3] = {{3,6,5},{7,-2,4},{1,0,-9}};
    //定义临时变量用于存储临时数据,作为中转站
    int c = 0; 
    for(int k=0;k<3;k++){
        for(int i=0;i<3;i++){
            for(int j=i+1;j<3;j++){
                if(A[k][i] > A[k][j]){
                    c = A[k][i];
                    A[k][i] = A[k][j];
                    A[k][j] = c;
                }
            }
        }
    }
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            printf("%d\t",A[i][j]);
        }
        printf("\n");
    }
    return 0;
}
C:\Users\xiaoqian\CLionProjects\untitled9\cmake-build-debug\untitled9.exe
3       5       6
-2      4       7
-9      0       1

进程已结束,退出代码为 0