24小时热门版块排行榜    

查看: 4151  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

Gout

金虫 (正式写手)

[求助] 如何将取向矩阵中归一化的{hkl}转化成互质化的{HKL},求算法!!!!

如何将取向矩阵中归一化的{hkl}转化成互质化的整数{HKL},求程序算法!!!!
      
        具体就是将如何将三个小数化为互质化的整数??
回复此楼

» 收录本帖的淘帖专辑推荐

科研、投稿中可能遇到的小问题

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

仰望着那片蓝天
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zxhao168

捐助贵宾 (正式写手)


【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
zhyq8767: 金币+3, 感谢应助 2012-04-04 22:05:10
Gout: 金币+10, ★★★★★最佳答案, 绝对的好人,非常好的程序,谢谢你啊~ 2012-04-05 09:10:41
Gout: 回帖置顶 2012-04-05 09:27:32
clear
clc
Indices=input('Please input the normalized indices [hkl]=');
h=Indices(1,1)/sqrt(dot(Indices,Indices));
k=Indices(1,2)/sqrt(dot(Indices,Indices));
l=Indices(1,3)/sqrt(dot(Indices,Indices));
h1=abs(h);
k1=abs(k);
l1=abs(l);
if h1>1e-3 && k1>1e-3 && l1>1e-3    % [hkl]均非负
    if h1>=l1 && k1>=l1     % l1最小
        A=h1/l1;
        B=k1/l1;
        i=1;
        while (abs(A-round(A))>1e-2 || abs(B-round(B))>1e-2)
            A=A*(i+1)/i;
            B=B*(i+1)/i;
            i=i+1;
        end
        if sign(l)<0
            L=-i;
        else
            L=i;
        end
        if sign(h)<0
            H=-round(A);
        else
            H=round(A);
        end
        if sign(k)<0
            K=-round(B);
        else
            K=round(B);
        end
    elseif h1>=k1 && l1>=k1    % k1最小
        A=h1/k1;
        B=l1/k1;
        i=1;
        while (abs(A-round(A))>1e-2 || abs(B-round(B))>1e-2)
            A=A*(i+1)/i;
            B=B*(i+1)/i;
            i=i+1;
        end
        if sign(k)<0
            K=-i;
        else
            K=i;
        end
        if sign(h)<0
            H=-round(A);
        else
            H=round(A);
        end
        if sign(l)<0
            L=-round(B);
        else
            L=round(B);
        end
    elseif k1>=h1 && l1>=h1     % h1最小
        A=k1/h1;
        B=l1/h1;
        i=1;
        while (abs(A-round(A))>1e-2 || abs(B-round(B))>1e-2)
            A=A*(i+1)/i;
            B=B*(i+1)/i;
            i=i+1;
        end
        if sign(h)<0
            H=-i;
        else
            H=i;
        end
        if sign(k)<0
            K=-round(A);
        else
            K=round(A);
        end
        if sign(l)<0
            L=-round(B);
        else
            L=round(B);
        end
    end
elseif h1<=1e-3            % h1 接近零
    H=0;
    if k1<=1e-3        % h1接近零的同时k1也接近零
        K=0;
        if sign(l)<0
            L=-round(l);
        else
            L=round(l);
        end
    elseif l1<=1e-3    % h1接近零的同时,l1也接近零
        L=0;
        if sign(k)<0
            K=-round(k);
        else
            K=round(k);
        end
    elseif k1>1e-3 && l1>1e-3     % 只有h1 接近零
        if k1>l1
            A=k1/l1;
            i=1;
            while(abs(A-round(A))>1e-3)
                A=A*(i+1)/i;
                i=i+1;
            end
            if sign(l)<0
                L=-i;
            else
                L=i;
            end
            if sign(k)<0
                K=-round(A);
            else
                K=round(A);
            end
        else
            A=l1/k1;
            i=1;
            while(abs(A-round(A))>1e-3)
                A=A*(i+1)/i;
                i=i+1;
            end
            if sign(k)<0
                K=-i;
            else
                K=i;
            end
            if sign(l)<0
                L=-round(A);
            else
                L=round(A);
            end
        end
    end
elseif k1<=1e-3            % k1 接近零
    K=0;
    if h1<=1e-3        % k1接近零的同时h1也接近零
        H=0;
        if sign(l)<0
            L=-round(l);
        else
            L=round(l);
        end
    elseif l1<=1e-3    % k1接近零的同时,l1也接近零
        L=0;
        if sign(h)<0
            H=-round(h);
        else
            H=round(h);
        end
    elseif h1>1e-3 && l1>1e-3     % 只有k1 接近零
        if h1>l1
            A=h1/l1;
            i=1;
            while(abs(A-round(A))>1e-3)
                A=A*(i+1)/i;
                i=i+1;
            end
            if sign(l)<0
                L=-i;
            else
                L=i;
            end
            if sign(h)<0
                H=-round(A);
            else
                H=round(A);
            end
        else
            A=l1/k1;
            i=1;
            while(abs(A-round(A))>1e-3)
                A=A*(i+1)/i;
                i=i+1;
            end
            if sign(h)<0
                H=-i;
            else
                H=i;
            end
            if sign(l)<0
                L=-round(A);
            else
                L=round(A);
            end
        end
    end
elseif l1<=1e-3            % l1 接近零
    L=0;
    if h1<=1e-3        % l1接近零的同时h1也接近零
        H=0;
        if sign(k)<0
            K=-round(k);
        else
            K=round(k);
        end
    elseif k1<=1e-3    % l1接近零的同时,k1也接近零
        K=0;
        if sign(h)<0
            H=-round(h);
        else
            H=round(h);
        end
    elseif h1>1e-3 && k1>1e-3     % 只有l1 接近零
        if h1>k1
            A=h1/k1;
            i=1;
            while(abs(A-round(A))>1e-3)
                A=A*(i+1)/i;
                i=i+1;
            end
            if sign(k)<0
                K=-i;
            else
                K=i;
            end
            if sign(h)<0
                H=-round(A);
            else
                H=round(A);
            end
        else
            A=k1/h1;
            i=1;
            while(abs(A-round(A))>1e-3)
                A=A*(i+1)/i;
                i=i+1;
            end
            if sign(h)<0
                H=-i;
            else
                H=i;
            end
            if sign(k)<0
                K=-round(A);
            else
                K=round(A);
            end
        end
    end
end
disp('互质化后的指数[HKL]=')
disp([H K L])

» 本帖已获得的红花(最新10朵)

6楼2012-04-04 22:02:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

hljhrb_ccl

金虫 (著名写手)


感谢参与,应助指数 +1
毛猴: 金币+1, 感谢交流! 2012-04-02 09:34:37
毛猴: 应助指数-1, 感谢交流! 2012-04-02 09:34:48
具体算法我不知道,使用textools这个软件有一个功能就是可以进行这样的转化的。我之前对镁合金的织构组分分析的时候,就利用这个软件!
让知识转化为能力!
2楼2012-04-02 07:51:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huangbx3

铁杆木虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
毛猴: 金币+1, 感谢交流! 2012-04-02 09:34:56
个人感觉该问题应该这样解决:
先将三个小数整数化,即同乘以一个数后将三个小数都变为整数;
然后将整数化的三个数同除以公约数,即可得到三个互质的数。
Lovethepeopleyoumet
3楼2012-04-02 09:34:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gout

金虫 (正式写手)

引用回帖:
2楼: Originally posted by hljhrb_ccl at 2012-04-02 07:51:35:
具体算法我不知道,使用textools这个软件有一个功能就是可以进行这样的转化的。我之前对镁合金的织构组分分析的时候,就利用这个软件!

嗯 我看到杨平老师在他的那本书中介绍这个软件时,提到textools这个软件有这个功能。可是,我现在授权使用的软件只有channel 5 和labtex,而且我更想添加到一些小程序里面,看来还得好好想想。
仰望着那片蓝天
4楼2012-04-02 10:12:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +32 医学老男孩 2026-08-13 74/3700 2026-08-16 21:05 by 医学老男孩
[论文投稿] 岩土工程学报什么时候才能终审完呐 25+3 yeager111 2026-08-10 4/200 2026-08-16 20:42 by tfang
[基金申请] 时间戳又变了8-15 +13 archvillain 2026-08-15 25/1250 2026-08-16 20:13 by zhaosm1982
[基金申请] 2027广东省杰青 +3 奶牛小黑 2026-08-15 6/300 2026-08-16 20:07 by 奶牛小黑
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +3 Tide man 2026-08-14 3/150 2026-08-16 17:47 by jurkat.1640
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +11 家与远方 2026-08-10 16/800 2026-08-16 10:28 by ray43
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] filecode=后面第一个是大写字母 +6 wangze12014 2026-08-14 7/350 2026-08-15 20:12 by gltch
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] filecode +15 documentary 2026-08-10 17/850 2026-08-14 10:08 by kissu88
[基金申请] FileCode能看出啥? +10 要乐观耀哥 2026-08-10 32/1600 2026-08-14 09:37 by 要乐观耀哥
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
信息提示
请填处理意见