24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 3793  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 261求B区调剂 +5 明仔· 2026-04-01 7/350 2026-04-02 11:17 by 邹尉尉
[考研] 275求调剂 +12 jjjjjjjjjjl 2026-03-27 12/600 2026-04-02 11:09 by 1939136013狗壮
[考研] 材料调剂 +3 一样YWY 2026-04-02 3/150 2026-04-02 10:37 by longlotian
[考研] 324分 085600材料与化工 +20 呆鹅oor 2026-03-27 20/1000 2026-04-02 10:13 by oooqiao
[考研] 08生物与医药专硕初试346找调剂 +6 dianeeee 2026-04-01 7/350 2026-04-02 08:23 by guoweigw
[考研] 一志愿安徽大学计算机科学与技术学硕,331分求调剂 +5 蒋昌鹏qtj 2026-04-01 5/250 2026-04-02 08:10 by fxue1114
[考研] 296求调剂 +4 汪!?! 2026-03-31 7/350 2026-04-01 22:04 by 客尔美德
[考研] 生物与医药考研调剂 +5 铁憨憨123425 2026-03-31 5/250 2026-04-01 18:01 by syh9288
[考研] 070300求调剂306分 +5 26要上岸 2026-03-27 5/250 2026-04-01 11:09 by oooqiao
[考研] 340求调剂 +4 希望如此i 2026-03-31 4/200 2026-03-31 16:40 by 690616278
[考研] 289求调剂 +3 Acesczlo 2026-03-29 4/200 2026-03-31 14:48 by 热情沙漠
[考研] 一志愿中海洋材料357 +4 麦恩莉. 2026-03-30 4/200 2026-03-31 14:35 by 记事本2026
[考研] 287求调剂 +17 land xuxu 2026-03-26 17/850 2026-03-31 11:16 by Zzxxxs
[考研] 269求调剂 +4 我想读研11 2026-03-31 4/200 2026-03-31 10:04 by cal0306
[考研] 抱歉 +4 田洪有 2026-03-30 4/200 2026-03-30 21:26 by mumin1990
[考研] 322求调剂 +10 宋明欣 2026-03-27 10/500 2026-03-30 18:47 by 544594351
[考研] 328求调剂 +8 嗯滴的基本都 2026-03-27 8/400 2026-03-30 17:20 by Wang200018
[考研] 求调剂,一志愿 南京航空航天大学大学 ,080500材料科学与工程学硕 +6 @taotao 2026-03-26 7/350 2026-03-30 10:43 by 我是小康
[考研] 305求调剂 +8 RuiFairyrui 2026-03-28 8/400 2026-03-29 08:22 by fmesaito
[考研] 308求调剂 +7 墨墨漠 2026-03-27 7/350 2026-03-28 07:43 by 热情沙漠
信息提示
请填处理意见