爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4026|回复: 4

EOF的C#代码

[复制链接]

新浪微博达人勋

发表于 2017-9-19 05:19:26 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 Mc.Fish 于 2017-9-19 05:38 编辑

把EOF翻译为了C#

Fortran实在不怎么用,也不太方便,
以前都是把数据处理好,手工修改Fortran代码运行,
数据多了不好办,改成了C#方便一点。

调用:
                //Raw[nT,mSp]
                double[,] V1 = new double[mSpa, mSpa];//排序后的特征向量--空间分布
                double[,] T = new double[nT, mSpa];      //             时间系数
                double[] H1 = new double[mSpa];          //             累计解释方差
                double[] D = new double[mSpa];            //             特征值
                WSAA.Base.EOF.SEOF(mSpa, nT, WSAA.Base.EOF.ContralParameter.NORMALIZED, Raw, ref V1, ref T, ref H1, ref D);

有个问题:
有时nT和 mSpa差别大,进行时空交换
https://wenku.baidu.com/view/e64ba4691eb91a37f1115c0b.html        P48
里提到 这样不改变特征根
可是一个特征值是  nT个, 一个特征值是 mSpa个,怎么会不改变呢

建议 大家把常用的统计程序写成C# 共享,建立一个库,方便大家使用。

C#代码在附件

EOF.cs

21.27 KB, 下载次数: 7, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-4-12 08:21:22 | 显示全部楼层
楼主的C#源程序还在吗?能提供一份吗?490110000@qq.coom
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-6-15 22:46:55 来自手机 | 显示全部楼层
楼主比较过C#和fortran运行速度么
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-26 22:12:19 | 显示全部楼层
tulalang 发表于 2022-6-15 22:46
楼主比较过C#和fortran运行速度么

C#1秒内完成分解输出最后的矩阵
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-27 11:42:09 | 显示全部楼层
楼主,我测试了这个EOF的C#代码。在雅克比方法里面,有一段内容可能翻译错了。
if (KM1 < 0)
                            {
                                for (int j = 0; j < KM1; j++)
                                {
                                    G = A[j, k];
                                    H = A[j, L];
                                    A[j, k] = c * G - s * H;
                                    A[j, L] = s * G + c * H;
                                }
                            }

                            int L1 = L - 1;
                            if (L1 - k1 <= 0)
                            {
                                for (int j = k1; j < L1; j++)
                                {
                                    G = A[k, L];
                                    H = A[j, L];
                                    A[k, j] = c * G - s * H;
                                    A[j, L] = s * G + c * H;
                                }
                            }

                            L1 = L + 1;
if(KM1<0)后面永远不会执行,同时,这份代码分解的结果还会出现贡献率为负数的问题。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表