如何用C语言生成SOR格式文件?

有OTDR测试数据,现在需要把数据转成SOR格式文件 。如何用C语言生成SOR格式文件?

你看看这个工具对你有用否
https://blog.csdn.net/qq_28207461/article/details/109112016

你好,可以点击图片链接查看相关代码,希望可以采纳:

img

img

img

img

img

img

https://blog.csdn.net/weixin_36445866/article/details/117269821?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4.pc_feed_download_top3ask

符合Bellcore 标准的OTDR文件,直接修改为SOR文件名。不符合的就需要软件转换才可以。

https://www.baidu.com/link?url=QVJhePgg46KDfa360WDXfNvfHa6FoJjw3V3glGwabvSGlW6UxOV2-vlJUMMFvrDU6ep85iC4tQTLnBLm4aYh9a&wd=&eqid=e43bdd8c0034dbf600000002622af9ae

望采纳谢谢,现在才发现这个问题我还可以给你讲解的,跟上一个回答者的还是有些不一样的,希望能帮到你哦
#include "stdlib.h"

#include "stdio.h"

#include "conio.h"

#include "string.h"

#include "math.h"

#define N 100

void cre_sch int n,float *w,float a[N][N],float b[N],float lw[N][N],float fw[N] int i,j,k; float tmp1[N][N],tmp2[N][N],rev[N][N],tmp; for i 0;i n;i++ for j 0;j n;j++ if j i tmp1[i][j] a[i][j]; tmp2[i][j] 1-w a[i][j]; rev[i][j] 1; else if j i tmp1[i][j] wa[i][j]; tmp2[i][j] 0; rev[i][j] 0; else tmp1[i][j] 0; tmp2[i][j] -wa[i][j]; rev[i][j] 0; for j 0;j n;j++ for i 0;i n;i++ for k 0;k j;k++ if i j continue; if i j rev[i][k] 1/tmp1[j][j]; continue; rev[i][k]+ rev[j][k] -tmp1[i][j] ; for i 0;i n;i++ for j 0;j n;j++ tmp 0.0; for k 0;k n;k++ tmp+ rev[i][k]*tmp2[k][j]; lw[i][j] tmp; for i 0;i n;i++ tmp 0.0; for k 0;k n;k++ tmp+ wrev[i][k]*b[k]; fw[i] tmp; void Table int n,float a[N][N],float b[N],float *w int i,j;

float lw[N][N],fw[N];

printf "Please input the matrix A by row!\n" ; /请输入矩阵的行/ for i 0;i n;i++ printf "Row %d:",i+1 ;

for j 0;j n;j++ scanf "%f",&a[i][j] ; printf "Please input the vector b:" ; /请输入向量b/

for i 0;i n;i++ scanf "%f",&b[i] ; printf "Input w:" ; scanf "%f",w ; cre_sch n,w,a,b,lw,fw ; printf "\nThe matrix A and vector b:\n" ; /矩阵A和向量b/

for i 0;i n;i++ for j 0;j n;j++ printf "%10.5f",a[i][j] ; printf "%10.5f",b[i] ; printf "\n" ; printf "\nThe SOR iterative scheme matrix Lw & vector fw :\n" ;/*SOR迭代 矩阵lw和向量fw */ for i 0;i n;i++ for j 0;j n;j++ printf "%10.5f",lw[i][j] ; printf "%10.5f",fw[i] ; printf "\n" ; void init_vec int n,float x[N] int i; printf "\nPlease input the initial iteration vector x:" ; /请输入初始迭代向量x/ for i 0;i n;i++ scanf "%f",&x[i] ; printf "\nThe initial iteration vector x:\n" ; /初始迭代向量x/ for i 0;i n;i++ printf "%10.5f",x[i] ; printf "\n" ; void sor int n,float a[N][N],float b[N],float x[N],float w int i,j,k; float p; /精确度/ float tmp1,tmp2,x2[N];

printf "输入精确值:\n" ; scanf "%f",&p ; for k 0;;k++ for i 0;i n;i++ x2[i] x[i]; for i 0;i n;i++ tmp1 0.0; tmp2 0.0; for j 0;j i;j++ tmp1+ a[i][j]*x[j];


#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 5
#define w 1
#define epsilon 0.0000001
void main()
{
    double normD(double x0[N], double x1[N]);
    void SORiteration1(double A[N][N], double b[N], double x0[N], double x1[N]);
    void SORiteration2(double A[N][N], double b[N], double x0[N], double  x1[N]);
    void triangularEquationsSolver(double T[N][N], double b[N], double x[N]);
    int i, j;
    static double A[N][N] = { { 5, 1, 1, 1, 1 }, { 1, 5, 1, 1, 1 }, { 1, 1, 5, 1, 1 }, { 1, 1, 1, 5, 1 }, { 1, 1, 1, 1, 5 } };
    double b[N] = { 1.0, 1.0, 1.0, 1.0, 1.0 };
    double x0[N] = { 1.0, 1.0, 1.0, 1.0, 1.0 };
    double x00[N] = { 1.0, 1.0, 1.0, 1.0, 1.0 };
    double xHf[N] = { 0 };
    double x1[N];
    do
    {
        memcpy(x0, x1, N*sizeof(double));
        SORiteration1(A, b, x0, xHf);
        SORiteration2(A, b, xHf, x1);


    } while (normD(x0, x1) > epsilon);



    printf("\n要求解的示例方程组为:\n A ||| b ||| x0\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            printf("%f ", A[i][j]);
        }
        printf("||| %f||| %f\n", b[i], x00[i]);
    }

    printf("\n方程组解为:\n");
    for (i = 0; i < N; i++)
    {
        printf("%f\n", x0[i]);
    }
    getchar();
}

double normD(double x0[N], double x1[N])
{
    int i;
    double s = 0;
    for (i = 0; i < N; i++)
    {
        s = s + (x0[i] - x1[i])*(x0[i] - x1[i]);
    }
    return sqrt(s);
}
void SORiteration1(double A[N][N], double b[N], double x0[N], double x1[N])//传数组往往是传其地址
{
    void triangularEquationsSolver(double T[N][N], double b[N], double x[N]);
    //浪费一点内存没事,程序更具可读性。
    double Lwl[N][N] = { 0 };
    double Uwr[N][N] = { 0 };
    //double bb[N];
    int i, j;
    double wb[N];
    for (i = 1; i < N; i++)
    {
        for (j = 0; j < i; j++)
        {
            Lwl[i][j] = w*A[i][j];
            Uwr[j][i] = -w*A[j][i];
        }

    }

    for (i = 0; i < N; i++)
    {
        Lwl[i][i] = A[i][i];
        Uwr[i][i] = (1 - w)*A[i][i];
        wb[i] = w*b[i];
    }



    for (i = 0; i < N; i++)
    {
        for (j = i; j < N; j++)
        {
            wb[i] = wb[i] + Uwr[i][j] * x0[j];
        }

    }
    triangularEquationsSolver(Lwl, wb, x1);

    //printf("X1:\n");
    //for (i = 0; i < N; i++)
    //{
    //  printf("%f", x1[i]);

    //}
    //getchar();


}


void SORiteration2(double A[N][N], double b[N], double x0[N], double x1[N])
{
    void triangularEquationsSolver(double T[N][N], double b[N], double x[N]);
    //浪费一点内存没事,程序更具可读性。
    double Uwl[N][N] = { 0 };
    double Lwr[N][N] = { 0 };

    int i, j;
    double wb[N];
    for (i = 1; i < N; i++)
    {
        for (j = 0; j < i; j++)
        {
            Uwl[j][i] = w*A[j][i];
            Lwr[i][j] = -w*A[i][j];

        }

    }
    for (i = 0; i < N; i++)
    {
        Uwl[i][i] = A[i][i];
        Lwr[i][i] = (1 - w)*A[i][i];
        wb[i] = w*b[i];
        for (j = 0; j < i; j++)
        {
            wb[i] = wb[i] + Lwr[i][j] * x0[j];
        }

    }
    triangularEquationsSolver(Uwl, wb, x1);

}




//求解上下三角方程的求解器
void triangularEquationsSolver(double T[N][N], double b[N], double x[N])
{
    int i, j;


    //for (i = 0; i < N; i++)
    //{
    //  for (j = 0; j < N; j++)
    //  {
    //      printf("%f  ", T[i][j]);
    //  }
    //  printf("\n");
    //}
    //getchar();


    if (T[0][N - 1] == 0)
    {
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < i; j++)
            {
                b[i] = b[i] - T[i][j] * x[j];
            }
            x[i] = b[i] / T[i][i];

        }
    }
    else
    {
        for (i = N - 1; i >= 0; i--)
        {
            for (j = i + 1; j < N; j++)
            {
                b[i] = b[i] - T[i][j] * x[j];
            }
            x[i] = b[i] / T[i][i];

        }
    }
}