24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 3792  |  回复: 10

Gout

金虫 (正式写手)

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

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

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

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

» 猜你喜欢

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

仰望着那片蓝天
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

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的回帖
普通回帖

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的回帖

Gout

金虫 (正式写手)

引用回帖:
3楼: Originally posted by huangbx3 at 2012-04-02 09:34:13:
个人感觉该问题应该这样解决:
先将三个小数整数化,即同乘以一个数后将三个小数都变为整数;
然后将整数化的三个数同除以公约数,即可得到三个互质的数。

我也曾这样想过,但是有一个问题。得到的取向矩阵每个元素都是小数点后面好多位的小数,所以取整数再除以公约数会有很大的困难,而且计算得可能是得到,例如1000001:2000001:3000001这种答案等等。
仰望着那片蓝天
5楼2012-04-02 10:19:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Gout

金虫 (正式写手)

送鲜花一朵
引用回帖:
6楼: Originally posted by zxhao168 at 2012-04-04 22:02:47:
clear
clc
Indices=input('Please input the normalized indices =');
h=Indices(1,1)/sqrt(dot(Indices,Indices));
k=Indices(1,2)/sqrt(dot(Indices,Indices));
l=Indices(1,3)/sqrt(dot(Indices,Indices) ...

很棒的程序,非常感谢!!!
仰望着那片蓝天
7楼2012-04-05 09:14:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

梦中人sss

铁虫 (小有名气)

引用回帖:
7楼: Originally posted by Gout at 2012-04-05 09:14:19
很棒的程序,非常感谢!!!...

哥们,你好,请问下这个程序如何执行吗,是以矩阵形式输入一个行向量吗,如输入【1,0,0】这种吗,感觉运行会出错,不是这么输入的
Hello,ladiesandgentleman
8楼2014-09-05 23:17:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jeffchenhust

铜虫 (小有名气)

Textools有试用版的。http://www.sciencesoftware.com.c ... detail12.asp?id=688
在右侧那边可以下载试用版
9楼2015-01-25 13:20:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lwp8989

新虫 (初入文坛)

引用回帖:
9楼: Originally posted by jeffchenhust at 2015-01-25 13:20:34
Textools有试用版的。http://www.sciencesoftware.com.cn/share/search_soft_detail12.asp?id=688
在右侧那边可以下载试用版

Textools这个软件还能找到吗?我也需要用!感谢!
10楼2018-05-29 10:39:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Gout 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 08生物与医药专硕初试346找调剂 +5 dianeeee 2026-04-01 6/300 2026-04-02 06:48 by ilovexiaobin
[考研] 273求调剂 +19 李芷新1 2026-03-31 19/950 2026-04-01 21:49 by chyhaha
[考研] 286分调剂 +18 Faune 2026-03-30 20/1000 2026-04-01 21:37 by 495374996
[考研] 311求调剂 +11 蓝月亮亮 2026-03-30 11/550 2026-04-01 16:33 by 七度不信任
[考研] 085600,材料与化工321分,求调剂 +11 大馋小子 2026-03-27 11/550 2026-04-01 16:10 by cymywx
[考研] 省双一流重点一本大学招收调剂 +4 wwwwffffff 2026-03-31 7/350 2026-04-01 15:23 by wwwwffffff
[考研] 环境工程调剂 +9 hyzzzzzzz. 2026-04-01 9/450 2026-04-01 14:20 by salamander`
[论文投稿] chinese chemical letters英文版投稿求助 120+4 Yishengeryi 2026-03-30 5/250 2026-04-01 14:11 by 陆小果画大饼
[考研] 08工科,295,接受跨专业调剂 +6 lmnlzy 2026-03-31 6/300 2026-04-01 11:02 by 逆水乘风
[考研] 一志愿华南师范361分,化学求调剂 +4 Nicole88888 2026-04-01 4/200 2026-04-01 10:08 by 唐沐儿
[考研] 309分085801求调剂 +7 学员Gtwj7W 2026-03-31 7/350 2026-04-01 02:36 by BruceLiu320
[考研] 085601英二数二求调剂 总分325 +4 余航航 2026-03-31 4/200 2026-03-31 17:38 by 唐沐儿
[考研] 一志愿中海洋材料357 +4 麦恩莉. 2026-03-30 4/200 2026-03-31 14:35 by 记事本2026
[考研] 生物考研337分求调剂 +4 cgxin 2026-03-30 6/300 2026-03-31 14:18 by 记事本2026
[考研] 一志愿西电085401数一英一299求调剂 六级521 +4 爱吃大鸭梨 2026-03-31 4/200 2026-03-31 11:51 by 搏击518
[考研] 286求调剂 +5 丢掉懒惰 2026-03-27 8/400 2026-03-31 11:27 by Delta2012
[考研] 284求调剂 +14 junqihahaha 2026-03-26 15/750 2026-03-30 14:12 by 探123
[考研] 本科新能源科学与工程,一志愿华理能动285求调剂 +7 AZMK 2026-03-28 11/550 2026-03-28 21:01 by xxxsssccc
[考研] 312,生物学求调剂 +3 小译同学abc 2026-03-28 3/150 2026-03-28 15:32 by 落睿可思
[考研] 298调剂 +3 jiyingjie123 2026-03-27 3/150 2026-03-27 11:57 by wxiongid
信息提示
请填处理意见